我有以下输入:

AG23,VU,Blablublablu,8
IE22,VU,FooBlaFooBlaFoo,3
and so on...


我希望它使用类似以下代码的scanf()“解析”:

char sem[5];
char type[5];
char title[80];
int value;

while(scanf("%s,%s,%s,%d", sem, type, title, &value) == 4) {
 //do something with the read line values
}


但是代码的执行给了我:illegal instruction

您将如何读取以逗号分隔的文件?

最佳答案

逗号不被视为空格字符,因此格式说明符"%s"将占用,,并且行上的所有其他内容均超出数组sem的范围,从而导致未定义的行为。要更正此问题,您需要使用扫描集:

while (scanf("%4[^,],%4[^,],%79[^,],%d", sem, type, title, &value) == 4)


哪里:


%4[^,]表示最多可以读取四个字符或直到遇到逗号为止。


指定宽度可防止缓冲区溢出。

10-08 14:07