c命令行int错误

时间:2013-11-20 01:11:25

标签: c int command-line-arguments

每当我从命令行发送一个号码时,它就会出错并给我一个错误的号码

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

./hw3 -e 100 baboon.ascii.pgm是我通过命令行发送的内容,当我将数字打印到屏幕时,我得到49作为数字

int edgeWidth在程序开头定义。

为什么不给我100?

3 个答案:

答案 0 :(得分:3)

argv包含一个字符串数组。所以argv[1]是一个字符串,您需要将其转换为整数:

edgeWidth = atoi(argv[1]);

答案 1 :(得分:2)

问题是通过做

edgeWidth = *argv[2];

您要将"100"的第一个字符分配给edgeWidth。 49恰好是'1'的ASCII值。

如果您需要100,则需要使用atoistrtol之类的内容将字符串解析为int。


附录:关于数字推广,C99 spec州6.5.16.1的第二部分:

  

简单赋值(=)中,转换右操作数的值   到赋值表达式的类型并替换存储的值   在左操作数指定的对象中。

所以看起来数字促销似乎发生在这里。

答案 2 :(得分:1)

因为命令行参数默认为char*(或某处可能是char**)而不是int。您需要atoi()之类的正确转换才能将其用作int。 您应该使用edgeWidth = atoi(argv[2])来获得预期的输出。