来自 ReadFile() 的乱码?

Gibberish from ReadFile()?

我已经使用管道重定向了 java.exe 的标准输出。现在我使用 ReadFile 和 char buffer 读取输出:

ReadFile( childStdOUTRd, buffer, sizeof(char) * 4096, &read, NULL);

缓冲区将被分配正确的数据。但是如果我把它改成 TCAHR[4096]:

ReadFile( childStdOUTRd, buffer, sizeof(TCHAR) * 4096, &read, NULL);

缓冲区收到乱码。我错过了什么吗?

首先你应该检查 ReadFile 的 return 值。如果它 returned FALSE 那么读取失败并且数据可能是乱码。

另外,检查 read 的值。它会说明读取了多少个字符。不要尝试使用缓冲区中超过 read 字节值的任何内容。

接下来,ReadFile 函数接收原始字节,它不解释它们。如果您的系统将 TCHAR 定义为 16 位 wchar_t,则此调用将从输入流中读取 8192 字节。它应该可以正常工作。

你没有说你是如何确定缓冲区收到的 "gibberish"。如果您试图假装缓冲区包含实际的 wchar_ts 但输入流不包含 wchar_ts 那么它就没有意义。解决办法是:不要那样做。

最后,TCHAR 在过去的 15 年里已经不相关了。根据您的需要使用 charwchar_t