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

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/

10-12 03:14
查看更多