2013-11-20 5 views
1

Всякий раз, когда я посылаю в номере из командной строки это ошибки и дает мне неправильный номерс командной строкой INT неправильно

edgeWidth=*argv[2]; 
printf("Border of %d pixels\n", edgeWidth); 
fileLocation=3; 

./hw3 -e 100 baboon.ascii.pgm является то, что я посылаю через командную строку, и когда я напечатать номер на экран я получаю 49 как номер

int edgeWidth определяется в начале программы.

Почему это не дает мне 100?

ответ

2

Проблема заключается в том, что, делая

edgeWidth = *argv[2]; 

вы присваиваете первый символ "100" к edgeWidth. 49 является значением ASCII для '1'.

Если вы хотите 100, вам нужно использовать что-то вроде atoi или strtol, чтобы разобрать строку в int.


Дополнение: Что касается цифровой рекламы, часть второй 6.5.16.1 в C99 spec состояниях:

В простом присваивании (=), то значение правого операнда преобразуются в тип выражения присваивания и заменяет сохраненное значение в объекте, обозначенном левым операндом.

, так что здесь появляется цифровая реклама.

+0

ОК, у меня возникло чувство, что это проблема. Спасибо, что сработало! Очень ценится – kevorski

3

argv содержит массив строк. Так argv[1] является строкой, вы должны преобразовать его в целое число:

edgeWidth = atoi(argv[1]); 
1

Поскольку аргументы командной строки, по умолчанию, как char* (или может быть char** где-то) не int. вам нужно правильное преобразование, например atoi(), чтобы использовать его как int. Чтобы получить ожидаемый выход, вы должны использовать edgeWidth = atoi(argv[2]).

+0

Неверно - используйте 'atoi (argv [2])' not 'atoi (* argv [2])'. В конечном итоге вы будете искать символ вместо строки. Я не думаю, что компилятор позволит вам ... – Floris

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