c++ file.open()函数意外返回值[已关闭]

yfjy0ee7  于 2023-04-01  发布在  其他
关注(0)|答案(1)|浏览(177)

**已关闭。**此问题为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数组,它工作了,但我不能返回它了。

xqkwcwgp

xqkwcwgp1#

答案很简单:您使用指向char(char *)的指针来返回预期为null终止的字符串(最后一个字符是/0)。但是,您返回的指针不一定是null终止的。
正如你的问题的注解中提到的,在填充缓冲区之前,分配length + 1并将最后一个字符设置为0(而不是'0'),或者使用std::string来存储信息。
上文也提到:该函数格式不正确,因为在无法打开文件的情况下,它根本不返回任何内容。
最后一个想法:如果您看到打印出的字符是意外的,那么您几乎总是运行超过缓冲区的末尾。

相关问题