c++ - 读取文件内容时读取未知符号

标签 c++ file-io

如标题所示,当读取文件内容时,我发现它会读取内容中的未知符号。

代码:

char *buff = NULL;
size_t size = 0;    
ifstream file("c:\\file.txt", ios::out);

if(!file){
    cout << "File does not open." << endl;
}

file.seekg(0, file.end);
size = file.tellg();
file.seekg(0, file.beg);

buff = new char[size];
while(!file.eof()){
    file.read(buff, size);
}

cout << buff << endl;
delete[] buff;

文件内容:

您好世界!。 感谢您的帮助。

结果:

如您在上图中所见,有许多未知符号。
为什么会出现这些符号,我的代码有什么问题?

最佳答案

您的 char 数组不是空终止的,或者创建一个带有空间的数组用于一个额外的空字符(并将其设置为 '\0')

buff = new char[size + 1];
buff[size] = '\0';
// Or simply
buff = new char[size + 1]{};

或者最好尽可能避免使用原始指针,尤其是用作字符串的字符数组。

while(!file.eof())是一种反模式,除非在非常特殊的情况下,否则不要使用它。

std::ifstream file("file.txt");
std::string buff{ // Use regular brackets if not C++11
  std::istreambuf_iterator<char>(file),
  std::istreambuf_iterator<char>()
};

关于c++ - 读取文件内容时读取未知符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24604015/

相关文章:

c++ - 用于在内存中存储字符串数组的数据结构

c# - 检查文件是否存在于忽略扩展名的目录中

java - Java Android 中的 EOFException?需要帮助

javascript - 在 Meteor [1.0.0] 中写入服务器上的文件(每次构建都不会丢失文件)

flash - 如何使用 Flash 让我的一个类为多个平台加载声音文件?

java - 如何制作一个操纵另一个程序 ui 的程序

c++ - C++ 中字符串和 ofstream 参数的类似 Java 的 null

c++ - 处理删除命令期间出现段错误

c# - FileStream 参数读/写

c++ - 调用的是构造函数还是转换?