我想从字符串中读取数据。字符串是这样的:
"123 35 123 0 0 0 817 0 0 0 0"
字符串中有一些不确定的数字和空格。我想读第三个数字。如何读取数据?
使用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()
必须检查返回值的原因。
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
它,它更快(因为它不需要解析格式字符串)。