2

我想从字符串中读取数据。字符串是这样的:

"123 35   123 0    0      0       817 0    0   0   0"

字符串中有一些不确定的数字和空格。我想读第三个数字。如何读取数据?

4

2 回答 2

10

使用sscanf(). 它将跳过空格。

int a, b, c;
if( sscanf(string, "%d %d %d", &a, &b, &c) == 3)
  printf("the third number is %d\n", c);

您还可以使用%*来禁止分配前两个数字:

int a;
if( sscanf(string, "%*d %*d %d", &a) == 1)
  printf("the third number is %d\n", a);

请注意,它返回它进行的成功转换(和分配)的数量,这就是为什么在依赖输出变量的值之前sscanf()必须检查返回值的原因。

于 2012-09-24T11:34:19.720 回答
2

sscanf就是为此而设计的,特别是*丢弃输入的修饰符:

const char *input = "...";
int value;

// here we use the '*' modifier to discard the input from our string
sscanf("%*i %*i %i", &value);

// value now magically has the value you need.

sscanf然而,它确实有它的缺点。虽然它确实会根据需要丢弃空格,但传统上它也很慢。如果可以,我会改用strtol它,它更快(因为它不需要解析格式字符串)。

于 2012-09-24T11:33:53.720 回答