C++ C++;:输入文件行最后一个元素的strtok奇怪行为?
我正在逐行读取一个文件(如下所示的示例),对于每一行,我都使用strtok获取被制表符分隔的元素(如代码所示)。现在,当我用数据创建文件时,我会这样做:键入“A”,键入tab,键入“10”按enter键,依此类推。在这种情况下,打印数字时,后面跟着奇怪的字符,有时是字母/数字。此问题的“修补程序”是按以下方式输入数据:键入“A”,按tab,键入“10”按tab。有谁能向我解释为什么会发生这种情况,有没有更好的方法来解决它C++ C++;:输入文件行最后一个元素的strtok奇怪行为?,c++,strtok,C++,Strtok,我正在逐行读取一个文件(如下所示的示例),对于每一行,我都使用strtok获取被制表符分隔的元素(如代码所示)。现在,当我用数据创建文件时,我会这样做:键入“A”,键入tab,键入“10”按enter键,依此类推。在这种情况下,打印数字时,后面跟着奇怪的字符,有时是字母/数字。此问题的“修补程序”是按以下方式输入数据:键入“A”,按tab,键入“10”按tab。有谁能向我解释为什么会发生这种情况,有没有更好的方法来解决它 sample.txt A 10 B 20 C 3
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;
}
sample.txt
A 10
B 20
C 30
//str包含文件的一行
char*pch=strtok(str,“\t”);
//打印字符
如果(pch!=NULL){
cout我不知道问题的原因是什么,但我通过在从文件读取的每行末尾添加一个制表符(“\t”)字符来“修复”它。这取决于您如何读取行。这听起来像是str
不是以null结尾的,即它是一个字符缓冲区,而不是有效的C字符串。