C++ 无法获取返回值
我正在使用此函数读取记事本文件并将数据填入char str[255]中,但执行此函数后str仍然为空C++ 无法获取返回值,c++,C++,我正在使用此函数读取记事本文件并将数据填入char str[255]中,但执行此函数后str仍然为空 char str[255]; char* data_pull() { std::ifstream in("C:/myfile.txt"); if(!in){ printf("\nCannot open the file"); exit (1); } while(in){ in.getline(str, 255);
char str[255];
char* data_pull()
{
std::ifstream in("C:/myfile.txt");
if(!in){
printf("\nCannot open the file");
exit (1);
}
while(in){
in.getline(str, 255);
printf(str);
}
in.close();
return str;
}
使用in.getlinestr,255;您一直在为输入文件中的每一行覆盖str:换句话说,每一行都将覆盖存储在str中的前一行
如果文件以空行结尾,则str将在循环末尾存储一个空字符串。with in.getlinestr,255;您一直在为输入文件中的每一行覆盖str:换句话说,每一行都将覆盖存储在str中的前一行
如果文件以空行结尾,则str将在循环末尾存储一个空字符串。printfstr的输出是什么?顺便说一句,对于从外部输入读取的str,不要使用printfstr,因为str可能包含像%s这样的格式代码,最好使用putsstr或printf%s,str。您如何看到返回的字符串是空的?除了一个问题:文本中的最后一行是空行吗?printfstr给了我正确的输出,但是当我在其他函数中使用str时,我知道str是空的empty@sumitkang:这是因为文件以空行结尾,所以str中存储的最后一个值就是那一空行。这里没什么奇怪的。printfstr的输出是什么?顺便说一句,对于从外部输入读取的str,不要使用printfstr,因为str可能包含像%s这样的格式代码,最好使用putsstr或printf%s,str。您如何看到返回的字符串是空的?除了一个问题:文本中的最后一行是空行吗?printfstr给了我正确的输出,但是当我在其他函数中使用str时,我知道str是空的empty@sumitkang:这是因为文件以空行结尾,所以str中存储的最后一个值就是那一空行。这里没什么奇怪的,不太正确;我在一个最后一行非空的文件上测试了代码,但缓冲区仍然是空的。@csl:您使用的文件最后一行是空的。你根本没有意识到这一点。如果文件中的最后一行以特定于平台的行尾标记结束,如Windows上的CR+LF,则文件中还有一行是空的,后面是。如果要创建一个具有真正非空的最后一行的文件,则需要一个在最后一行末尾没有行尾标记的文件,如SomeData。你试过了吗?@AndreyT vim没有显示任何尾随的换行符,但可以肯定的是,echo-ne hello\nworld>测试工作正常。谢谢,不太正确;我在一个最后一行非空的文件上测试了代码,但缓冲区仍然是空的。@csl:您使用的文件最后一行是空的。你根本没有意识到这一点。如果文件中的最后一行以特定于平台的行尾标记结束,如Windows上的CR+LF,则文件中还有一行是空的,后面是。如果要创建一个具有真正非空的最后一行的文件,则需要一个在最后一行末尾没有行尾标记的文件,如SomeData。你试过了吗?@AndreyT vim没有显示任何尾随的换行符,但可以肯定的是,echo-ne hello\nworld>测试工作正常。谢谢