每当我从命令行发送一个号码时,它就会出错并给我一个错误的号码
edgeWidth=*argv[2];
printf("Border of %d pixels\n", edgeWidth);
fileLocation=3;
./hw3 -e 100 baboon.ascii.pgm
是我通过命令行发送的内容,当我将数字打印到屏幕时,我得到49作为数字
int edgeWidth
在程序开头定义。
为什么不给我100?
答案 0 :(得分:3)
argv
包含一个字符串数组。所以argv[1]
是一个字符串,您需要将其转换为整数:
edgeWidth = atoi(argv[1]);
答案 1 :(得分:2)
问题是通过做
edgeWidth = *argv[2];
您要将"100"
的第一个字符分配给edgeWidth。 49恰好是'1'
的ASCII值。
如果您需要100
,则需要使用atoi
或strtol
之类的内容将字符串解析为int。
附录:关于数字推广,C99 spec州6.5.16.1的第二部分:
在简单赋值(=)中,转换右操作数的值 到赋值表达式的类型并替换存储的值 在左操作数指定的对象中。
所以看起来数字促销似乎发生在这里。
答案 2 :(得分:1)
因为命令行参数默认为char*
(或某处可能是char**
)而不是int
。您需要atoi()
之类的正确转换才能将其用作int
。
您应该使用edgeWidth = atoi(argv[2])
来获得预期的输出。