用scanf读取逗号分隔的输入

Moo*_*lit 14 c csv scanf

我有以下输入:

AG23,VU,Blablublablu,8
IE22,VU,FooBlaFooBlaFoo,3
and so on...
Run Code Online (Sandbox Code Playgroud)

我希望它使用像这样的代码"解析"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
}
Run Code Online (Sandbox Code Playgroud)

但代码的执行给了我:illegale instruction 你会如何读取这样的逗号分隔文件?

hmj*_*mjd 39

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

while (scanf("%4[^,],%4[^,],%79[^,],%d", sem, type, title, &value) == 4)
Run Code Online (Sandbox Code Playgroud)

哪里:

  • %4[^,] 意味着最多读取四个字符或直到遇到逗号.

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