C中的sscanf()跳过整数并读取字符串

时间:2014-04-06 23:22:19

标签: c scanf

我有一个包含此格式数据的文件:

  

1 Jake 234 Ruby 98。

我想使用sscanf只将字符串读入数组,所以我尝试了这个:

male[i] = malloc(100);
female[i] = malloc(100);

sscanf(str, "%*d%s%*d%s%*d", &male[i], &female[i]);

问题是当i = 0时,函数会跳过第一个字符串和第一个整数。因此,当我尝试打印&male[0]时,我会得到一个空白区域。

我已将i初始化为0。有人可以指出我可能出错的地方吗?

非常感谢!

1 个答案:

答案 0 :(得分:3)

  1. 使用male[i]而不是&male[i]

  2. 将字符串输入限制为99(比缓冲区空间大1小1)

  3. 检查sscanf()

  4. 的返回值
  5. 最后"%*d"没有做任何事情。

  6. -

    char *male[N]; // assumed sample declaration
    char *female[N];
    
    male[i] = malloc(100);
    female[i] = malloc(100);
    int cnt = sscanf(str, "%*d%99s%*d%99s", male[i], female[i]);
    if (cnt == 2) Success();
    

    如果你想确保解析所有数据并且最后没有非白色空间....

    int n = 0;
    int cnt = sscanf(str, "%*d%99s%*d%99s%*d %n", male[i], female[i], &n);
    if (cnt == 2 && str[n] == '\0') Success();