Sscanf没有给我一个价值

时间:2015-08-16 15:06:53

标签: c arrays string scanf

我有这段代码:

if(string_starts_with(line, "name: ") == 0){
    //6th is the first char of the name
    char name[30];
    int count = 6;
    while(line[count] != '\0'){
        name[count-6] = line[count];
        ++count;
    }
    printf("custom string name: %s", name);
    strncpy(p.name, name, 30);
}
else if(string_starts_with(line, "age: ") == 0){
    //6th is the first char of the name
    printf("age line: %s", line);
    short age = 0;
    sscanf(line, "%d", age);
    printf("custom age: %d\n", age);
}

if有效,但else if不起作用。 示例输出为:

person:
name: great
custom string name: great
age: 6000
age line: age: 6000
custom age: 0

我改变了很多,比如在&age函数中使用sscanf,但没有任何效果。

2 个答案:

答案 0 :(得分:6)

如果要将值存储到short(为什么?),则需要使用适当的长度修改器。此外,如果您希望在前缀字符串后面加上数字,则需要在前缀字符串后面开始扫描。最后,正如您在传递中提到的那样,有必要为sscanf提供要存储值的变量的地址

请务必检查sscanf的返回值,以确保找到了数字。

简而言之:

if (sscanf(line + 5, "%hd", &age) != 1) {
  /* handle the error */
}

如果您已编译并启用了额外警告,则会显示其中一些错误(但不是全部错误)。使用gcc或clang时,请始终在编译器选项中使用-Wall

答案 1 :(得分:1)

short age = 0;
sscanf(line, "%d", age);

age的类型为short,您使用的格式说明符为%d,这是错误的。

使用%hd代替short -

  sscanf(line+5, "%hd",&age);