2015-01-25 3 views
1

Что может быть неправильным с этим заявлением execl? Когда я пытаюсь запустить его, принимающий исполняемый жалуется, что argc меньше 3. Когда я распечатать содержимое ARGV, я получаю следующее:execl не записывает все аргументы

argv[1] = -1076146944 
argv[2] = 0 

Несмотря на аргументы, состоящий из:

numJoeysStr = 6 
randomNumSeedStr = 7 

execl("/path/to/executable", "numJoeysStr", "randNumSeedStr", (char *)0); 

FWIW, я попробовал NULL вместо (char *) 0). Это не изменило ситуацию.

Chris Jester-Young решена моя самая большая проблема, но теперь я получаю следующее после размещения в функции дважды:

argv[1] = -1075725068 
argv[2] = -1075725056 

Я попытался разыменования, выполнив:

printf("argv[1] = %d\n", *argv[1]); 
printf("argv[2] = %d\n", *argv[2]); 

только получить следующее:

argv[1] = 110 
argv[2] = 114 

Когда я ожидал:

argv[1] = 6 
argv[2] = 7 

Для окончательной проблемы получается, что передача переменных в execl без кавычек дала ему числа, которые я ожидал. Мне как-то казалось, что все аргументы execl (кроме последнего) должны быть в кавычках, даже переменные.

+1

Почему вы печатаете аргументы как целые числа, а не как строки? – immibis

+0

О, верно! Позвольте мне попробовать strtol() – user1185790

+0

Я прокомментировал это до вашего редактирования. Ваша новая проблема заключается в том, что вы печатаете значение ASCII первого символа, чего вы не хотите. (И да, 'strtol' преобразует десятичную форму числа (в строке) в фактическое число) – immibis

ответ

4

На самом деле вам необходимо указать "/path/to/executable"дважды. Первый - это программа для выполнения, а вторая - это argv[0] для нового процесса.

+0

Отлично, спасибо! Теперь у меня есть argv [1] = -1076376332, а argv [2] = -1076376320. Я предполагаю, что эти аргументы являются указателями, которые должны быть разыменованы. – user1185790

+0

@ user1185790 Действительно. –

+0

Хороший ответ. На самом деле вам не нужно дважды указывать имя программы, но вы должны поместить что-то, что будет передано программе, как argv [0]. Вы можете изменить argv [0], даже чтобы лежать в исполняемой программе. Конвенция обязывает поставить название программы, но это только конвенция. –

Смежные вопросы