当我编译我的程序时,我没有得到错误,但当我启动它时,我得到一个"分段错误"。我尝试读取的文件是这样构建的:
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);
- 读取一个整数
- 读取字符';'
- 最多读取100个字符,遇到字符';'停止读取
- 再读取字符;
- 读取下一个字符。(男人还是女人??)。