如标题所示,当读取文件内容时,我发现它会读取内容中的未知符号。
代码:
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/