【发布时间】:2017-04-30 20:56:54
【问题描述】:
我想解析一个整数,但我的以下代码也接受像“3b”这样的字符串,它以数字开头但附加了字符。如何拒绝这样的字符串?
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int n;
if(argc==2 && sscanf(argv[1], "%d", &n)==1 && n>0){
f(n);
return 0;
}
else{
exit(EXIT_FAILURE);
}
}
【问题讨论】:
-
你不要使用
sscanf();您使用strtol()或类似名称,并检查结束指针指向的位置。或者,如果您必须使用sscanf(),则使用int pos; … if (… && sscanf(argv[1], "%d%n", &n, &pos) == 1)— 请注意,%n不计为转换,因此比较仍然针对1,而不是2。然后检查argv[1][pos]是否为空字节,如果不是则抱怨。