读取文件时sscanf出现分段错误



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

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

我有强烈的感觉我的sscanf函数是问题。请帮帮我。

#define MAXCHAR 30
#define MAXZEILE 40
void speicher(char Z[MAXCHAR]){
FILE *QUELL;
int a;
char n[MAXCHAR];
char g;
char string[MAXZEILE];
    QUELL=fopen(Z,"r");
    fgets(string, MAXZEILE, QUELL);
    sscanf(string, "%d;%s;%c", &a, n, &g);
    printf("%d, %s, %c", a, n, g);
    fclose(QUELL);
}

我的错:文件输入的MAXCHAR值过低。文件长度超过30个字符

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

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

如果没有正确地对;进行标记,%s将继续抓取输入,直到下一个空白(在您的情况下将是行尾)。应该改成

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

%[^;]指定抓取非;的字符,从而实现所需的结果。

为了获得更强的健壮性,您可能希望考虑使用strtok首先将其与;分开,然后处理每个单独的段。

我认为对于您的目的,下面写的行已经足够了

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

相关内容

  • 没有找到相关文章

最新更新