gpt4 book ai didi

c++ - std::wcout 将不会在一定数量的字符后打印

转载 作者:行者123 更新时间:2023-11-28 05:18:03 28 4
gpt4 key购买 nike

一段时间以来,我一直在用这个问题撞墙。我只是想制作一个简单的应用程序来读取文件的内容。下面是一些代码:

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 每次迭代都会被填满。我还尝试放入调试语句,但即使是那些也不会打印出来。我只是做错了什么吗?据我所知,我的文件中没有特殊字符,它只是一个日志文件。

最佳答案

std::wcout << content;

这实际上是在调用 std::wostream::operator<<(const wchar_t *) .它不知道 content不是以 ␀ 结尾的字符串。事实上,它不可能知道它在第一种情况下的有效长度为 4096,而在第二种情况下它的有效长度要少一些(您不保存 fgetswc 的返回值)。

关于c++ - std::wcout 将不会在一定数量的字符后打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42185273/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com