防止C解释sscanf中的负整数

时间:2014-04-18 10:05:14

标签: c stdio

我希望能够将任何无符号长整数作为我的程序的参数。考虑这个简化版本。

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,也许这是最好的解决方案?

1 个答案:

答案 0 :(得分:1)

您可以使用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;
}