2013-03-12 27 views
0

我正在从一个文件(示例如下所示),逐行阅读,并且对于每一行我使用strtok来获取由制表符分隔的元素(如代码所示)。现在,当我用数据创建文件时,我这样做:键入“A”,键入选项卡,键入“10”按回车,依此类推。在这种情况下,打印号码后会出现奇怪的字符,有时还会出现字母/数字。这个问题的“修补程序”是按以下方式输入数据:键入“A”,按Tab键,键入“10”按标签。任何人都可以向我解释为什么会发生这种情况,有没有更好的解决方法?C++:strtok输入文件行最后一个元素的奇怪行为?

sample.txt 

A 10 
B 20 
C 30 

//str contains a line of the file   
char * pch = strtok (str,"\t"); 
//print character 
if(pch !=NULL){ 
    cout<<pch<<endl; 
} 
//print number 
pch = strtok (NULL, "\t"); 
if(pch !=NULL){ 
    cout<<pch<<endl; 
} 
+1

这取决于你如何阅读线条。这听起来像'str'不是空的终止,即它是一个字符缓冲区,而不是一个有效的C字符串。 – 2013-03-12 00:02:37

回答

0

我不知道这个问题的原因是什么,但通过在每行的结尾是从文件中读取添加一个标签(“\ t”的)角色,我“固定”它。