我想从字符串中读取数据。字符串是这样的:
"123 35 123 0 0 0 817 0 0 0 0"
字符串中有一些不确定的数字和空格。我想读第三个数字。如何阅读数据?
答案 0 :(得分: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()
返回它所做的成功转换(和赋值)的次数,这就是为什么必须在依赖输出变量的值之前检查返回值。< / p>
答案 1 :(得分: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
,这会更快(因为它不需要解析格式字符串)。