**已关闭。**此问题为not reproducible or was caused by typos。当前不接受答案。
这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
14分钟前就关门了。
Improve this question
我有一个从文件中读取数据的代码,但是如果我运行这个代码,它返回的数据比我预期的要多。有人可以帮助我解决这个问题。提前感谢。
文本文件:
test_line1
test_line2
test_line3
控制台输出:
test_line1
test_line2
test_line3rs\pc\█×u«║2
验证码:
#include <iostream>
#include <fstream>
using namespace std;
char *getDataFromFile(char *file_patch)
{
fstream file;
file.open(file_patch, ios::in | ios::binary);
if (file.is_open())
{
file.seekg(0, file.end);
int length = file.tellg();
file.seekg(0, file.beg);
char *data = new char[length];
file.read(data, length);
file.close();
return data;
}
file.close();
}
int main(int argc, char **argv)
{
cout << getDataFromFile("test.txt") << endl;
system("PAUSE");
return 0;
}
我试图创建一个void函数,在input中使用addres,但仍然不起作用。我还试图创建一个char表,而不是char数组,它工作了,但我不能返回它了。
1条答案
按热度按时间xqkwcwgp1#
答案很简单:您使用指向char(char *)的指针来返回预期为null终止的字符串(最后一个字符是/0)。但是,您返回的指针不一定是null终止的。
正如你的问题的注解中提到的,在填充缓冲区之前,分配
length + 1
并将最后一个字符设置为0(而不是'0'),或者使用std::string来存储信息。上文也提到:该函数格式不正确,因为在无法打开文件的情况下,它根本不返回任何内容。
最后一个想法:如果您看到打印出的字符是意外的,那么您几乎总是运行超过缓冲区的末尾。