我有以下输入:
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
}
但是,代码的执行给了我: illegale instruction
你将如何读以逗号分隔的文件中像这样?
逗号不被认为是空白字符所以格式说明"%s"
将消耗,
一切就行书写超出了数组的边界其他sem
导致未定义的行为。 要纠正这一点,你需要使用扫描集:
while (scanf("%4[^,],%4[^,],%79[^,],%d", sem, type, title, &value) == 4)
哪里:
指定宽度阻止缓冲区溢出。
您所遇到的问题是,因为当你说
scanf("%s,%s,%s,%d", sem, type, title, &value)
什么情况是,你正在试图做的是,你是适合所有行成这仅仅是5个字符的第一个字符串。 因此, sem[5]
溢出 ,和国有企业的各种有趣的事情。 为了避免这个问题,我尝试使用表达式%[^,]
,但它不太工作。 最好的办法是使用类似
while(scanf("%s%c%s%c%s%c%d", sem, &ch, type, &ch, title, &ch, &value) != EOF)
然后,你可以丢弃的ch
。 但是记住,最好使用其他功能,读取输入,如getchar()
之类的东西,这是更快,更安全的在某种意义上。