我希望能够将任何无符号长整数用作程序的参数。考虑这个简化的版本。
int main (int argc, char* argv[]){
unsigned long int steps;
sscanf(argv[1], "%lu", &steps);
printf("n is %lu \n",steps);
}
我的问题是,如果给它-10,它将返回ULONG_MAX-10,是否有一个优雅的解决方案,当在范围内时,我将返回整数;对于所有其他情况,将返回0。从我的阅读中,我可能需要以某种方式将fgets与regex一起使用,也许这是最好的解决方案?
最佳答案
您可以使用atol()
并检查返回的值。这是一个小例子:
#include <stdio.h>
#include <stdlib.h>
int
main(int argc, char **argv)
{
unsigned long int steps = 0;
if (argc > 1)
{
if (atol(argv[1]) > 0)
steps = atol(argv[1]);
}
printf("%lu\n", steps);
return 0;
}
关于c - 防止C解释sscanf中的负整数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23151843/