我一直当我运行的代码获得这些奇怪的负值。有谁知道它们是什么,以及如何得到的只是一个int(例如10,20,8 ...)?为什么我总是得到一个不同的错误值?当我运行参数2的代码和3它应该输出10 ...
int main(int argc, char *argv[]) {
int h;
int a;
int b;
a = (int) argv[1];
b = (int) argv[2];
if (argc == 3) {
h = 2 * (a + b);
printf("The perimeter of the rectangle is %d\n", h);
} else {
fprintf(stderr, "Usage: %s <arguments>\n", argv[0]);
}
}
Output:
The perimeter of the rectangle is -1874251136
or
The perimeter of the rectangle is -1424723328
or
The perimeter of the rectangle is -940059169
测试为时已晚
if(argc==3){
测试所需argc
,但使用后argv[1], argv[2]
不幸。之前移动测试并退出如果没有需要。注:良好的使用错误信息来stderr
。
if (argc != 3) {
fprintf(stderr,"Usage: %s <arguments>\n", argv[0]);
return -1; // or return EXIT_FAILURE
}
不正确的转换
代码转换的指针,而不是引用的文本。
#include <stdlib.h>
// a = (int)argv[1];
a = atoi(argv[1]);
健壮的代码将使用strtol()
或者是推出自己的`strtoi()'
argv
是指针char
的阵列。即这是一个字符串数组。字符串"1"
不等于整数1
(或甚至字符'1'
)。你正在做一个铸件的事实应该几乎总是一面红旗。
将一个字符串转换为数字使用strtol
功能。
永远记住访问argc
前检查argv
。
b = (int)argv[2]
该(int)
是指针值的铸 - 它只是转换类型
相反,尝试使用atoi
或strtol
将字符串转换为整数值。