strtok输入文件行最后一个元素的奇怪行为

C++: strtok strange behaviour in last element of the line of input file?

本文关键字:最后一个 输入 文件 strtok 元素      更新时间:2023-10-16

我正在逐行读取一个文件(如下所示的示例),对于每一行,我使用strtok来获取由制表符分隔的元素(如代码所示)。现在,当我用数据创建文件时,我这样做:键入"A",键入tab,键入"10",按enter,等等。在这种情况下,当打印数字时,后面跟着奇怪的字符,有时是字母/数字。这个问题的"补丁"是按以下方式输入数据:输入"A",按tab,输入"10",按tab。有人能向我解释一下为什么会发生这种情况,有没有更好的方法来解决它?

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;
 }

我不知道问题的原因是什么,但我通过在从文件中读取的每行末尾添加一个制表符("t")字符来"修复"它。