Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;:输入文件行最后一个元素的strtok奇怪行为?_C++_Strtok - Fatal编程技术网

C++ C++;:输入文件行最后一个元素的strtok奇怪行为?

C++ C++;:输入文件行最后一个元素的strtok奇怪行为?,c++,strtok,C++,Strtok,我正在逐行读取一个文件(如下所示的示例),对于每一行,我都使用strtok获取被制表符分隔的元素(如代码所示)。现在,当我用数据创建文件时,我会这样做:键入“A”,键入tab,键入“10”按enter键,依此类推。在这种情况下,打印数字时,后面跟着奇怪的字符,有时是字母/数字。此问题的“修补程序”是按以下方式输入数据:键入“A”,按tab,键入“10”按tab。有谁能向我解释为什么会发生这种情况,有没有更好的方法来解决它 sample.txt A 10 B 20 C 3

我正在逐行读取一个文件(如下所示的示例),对于每一行,我都使用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;
 }
sample.txt
A 10
B 20
C 30
//str包含文件的一行
char*pch=strtok(str,“\t”);
//打印字符
如果(pch!=NULL){

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

这取决于您如何读取行。这听起来像是
str
不是以null结尾的,即它是一个字符缓冲区,而不是有效的C字符串。