如何在C中扫描argv?

时间:2018-12-11 04:44:52

标签: c parsing

我给assoc:45作为命令输入,我怎么只扫描其中的整数?

我在这里只看了几篇文章,但只谈到使用atoi,我知道我不能使用它

任何帮助表示感谢,谢谢

2 个答案:

答案 0 :(得分:1)

使用strtok()atoi()的组合(顺便说一句,都是“坏”函数;如果您认为自己的代码必须是strsep()strtol(),请替换它们健壮)。

#include <string.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    strtok(argv[1], ":"); // Find the colon
    char *number = strtok(NULL, ":"); // Find the pointer to "after the colon"
    int n = atoi(number); // Convert to an int
    printf("%d\n", n);
    return 0;
}

答案 1 :(得分:0)

您可以使用对预期输入的了解来获得一个指向数字第一位的指针。然后,您可以使用sscanf

char* arg = <the argument>;
char* cp = arg;

// Iterate over the string until you find a : followed by a digit.
while ( *cp != '\0' )
{
   if ( *cp == ':' && isdigit(*(cp+1) )
   {
      ++cp;
      break;
   }
   ++cp;
}

if ( *cp == '\0' )
{
   // Deal with bad input.
}
else
{
   int num;
   int n = scanf(cp, "%d", &num);
   if ( n != 1 )
   {
      // Deal with bad input
   }
   else
   {
      // Got the number. Use it.
   }
}