读取文件内容时读取未知符号

时间:2014-07-07 06:11:22

标签: 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;

文件内容:

Hello world!. Thank you for help.

结果:

正如您在上一张图片中看到的,有许多未知数符号 为什么会出现这些符号,我的代码出了什么问题?

2 个答案:

答案 0 :(得分:3)

您的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>()
};

答案 1 :(得分:1)

您只能将operator<<(const char *)用于C风格的字符串。您不能将它用于任意字节块。怎么知道在哪里停下来?