在标题中,当读取文件内容时,我发现它会读取包含内容的未知符号。
代码:
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.
结果:
正如您在上一张图片中看到的,有许多未知数符号 为什么会出现这些符号,我的代码出了什么问题?
答案 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风格的字符串。您不能将它用于任意字节块。怎么知道在哪里停下来?