我的程序中有这个if
语句,应该检查启动程序时输入的参数。例如./a.out 2 2 + 0 x
(如果有人可以用英语写出这种输入参数的正确名称,我将不胜感激。
我的if
语句应检查输入的参数是否不是数字:
if(atof(argv[cnt]) == 0 && argv[cnt] != "0")
但是当argb [cnt] = 0时这是不幸的,这是不幸的(用GDB检查) 我做错了什么以及如何解决它?
答案 0 :(得分:2)
您可以在C strtol(3)(或strtod(3)用于管理结束指针的double
- s)中使用:
char* end = NULL;
long n = strtol(argv[cnt], 0, &end);
if (n > 0 && *end == '\0')
printf("got a good number %ld\n", n);
您还可以使用sscanf(3)和%n
。请注意,它返回扫描的项目计数:
int p= -1;
long n = 0;
if (sscanf(argv[cnt], "%ld %n", &n, &p) >= 1 && p>0)
printf("got a good number %ld (and scanned %d bytes)", n, p);
顺便说一句,如果您需要比较字符串,请使用strcmp(3)。 argv[cnt] != "0"
正在比较地址,我确定你的(或我的)系统总是如此(即使对于0
程序参数),因为程序参数是在call stack中,但文字字符串位于code segment。
如果您使用C++11进行编码,请了解std::string(operator ==按照您的想法行事)以及std::istringstream
请勿忘记编译所有警告和调试信息(gcc -Wall -Wextra -g
),然后使用调试器(gdb
)。
PS。我希望你在Linux上,这是一个学习编程的非常好的平台。