来自ReadFile()的胡言乱语?

时间:2015-07-24 02:34:31

标签: c++ readfile tchar

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

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

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

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

缓冲区收到了乱码。我想念一下吗?

1 个答案:

答案 0 :(得分:1)

首先,您应该检查ReadFile的返回值。如果它返回FALSE,则读取失败,数据可能是乱码。

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

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

你没有说你是如何确定缓冲区收到的“胡言乱语”。如果您试图假装缓冲区包含实际wchar_t但输入流不包含wchar_t s,那么它将没有意义。对此的解决方案是:不要那样做。

最后,TCHAR在过去15年中并不相关。根据您的需要使用charwchar_t