读取FILE时sscanf中的分段错误

时间:2016-07-02 16:42:50

标签: c string scanf

当我编译我的程序时,我没有得到任何错误,但是当我启动它时,我得到一个"分段错误"。我尝试阅读的文件是这样构建的:

i = 7

我强烈感觉我的sscanf功能是个问题。 请帮帮我。

322;Peter;m
233;Chad;m
211;Lisa;w

3 个答案:

答案 0 :(得分:1)

我的坏话: FILE输入的MAXCHAR为低。 文件有超过30个字符。

答案 1 :(得分:0)

在你的sscanf中%s不知道何时停止:

sscanf(string, "%d;%s;%c", &a, n, &g);

如果没有在;上正确标记,%s将继续抓取输入,直到下一个空格(在您的情况下将是该行的结尾)。它应该改为

sscanf(string, "%d;%[^;];%c", &a, n, &g);

%[^;]指定抓取不是;的字符,从而获得所需的结果。

为了更加健壮,您可能希望使用strtok首先将其;分开,然后处理每个细分。

答案 2 :(得分:0)

我认为根据您的目的,下面写的行就足够了

ReturnVal = sscanf(strinp1, "%d %c %100[^;] %c %c", &a, &Separator1, 
                   n,&Separator2, &g);
  1. 读取整数
  2. 然后阅读字符';'
  3. 最多阅读100个字符,停止阅读遇到字符&#39 ;;'
  4. 再读一遍这个角色;
  5. 阅读下一个字符。 (男人或女人???)。