我一直在用这一个用头撞墙。我只想创建一个简单的应用程序来读出文件的内容。这是一些代码:
errno_t error;
if ((error = fopen_s(&f, file, "r")) == 0) {
while (true) {
std::wcout << std::endl << "NEW RUN" << std::endl;
wchar_t content[4096];
if (fgetswc(content, 4096, f) == 4096) {
std::wcout << content;
std::wcout.flush();
}
else {
std::wcout << content;
std::wcout.flush();
break;
}
}
fclose(f);
std::wcout << "PLEASE PRINT THIS NOW";
system("pause");
return 0;
}
自定义fgetswc函数:
int fgetswc(wchar_t buffer[], int count, FILE * f) {
for (int i = 0; i < count; i = i + 1) {
wchar_t c = fgetwc(f);
if (c != WEOF) {
buffer[i] = c;
} else {
return i;
}
}
return count;
}
它读取文件中的前4096个字节,但随后的std::wcout
调用将不会打印到我拥有的控制台。它读取文件的其余部分并成功结束,我可以看到使用断点和调试器。 content
每次迭代都会被填满。我也试图输入调试语句,但即使那些也没有打印。我只是做错了吗?据我所知,我的文件中没有特殊字符,它只是一个日志文件。
答案 0 :(得分:1)
std::wcout << content;
这实际上是在调用std::wostream::operator<<(const wchar_t *)
。它不知道content
不是以␀结尾的字符串。实际上,它可能不知道它在第一种情况下的有效长度为4096,而在第二种情况下有一些数量较少(您不能保存fgetswc
的返回值)。