我使用管道重定向了java.exe的stdout。现在我使用ReadFile和char buffer读取输出:
ReadFile( childStdOUTRd, buffer, sizeof(char) * 4096, &read, NULL);
将为缓冲区分配正确的数据。但如果我把它改为TCAHR [4096]:
ReadFile( childStdOUTRd, buffer, sizeof(TCHAR) * 4096, &read, NULL);
缓冲区收到了乱码。我想念一下吗?
答案 0 :(得分:1)
首先,您应该检查ReadFile
的返回值。如果它返回FALSE
,则读取失败,数据可能是乱码。
另外,请检查read
的值。它会说出读了多少个字符。不要尝试使用超出read
字节值的缓冲区中的任何内容。
接下来,ReadFile
函数接收原始字节,但不解释它们。如果您的系统将TCHAR
定义为16位wchar_t
,则此调用将从输入流中读取8192
个字节。它应该正常工作。
你没有说你是如何确定缓冲区收到的“胡言乱语”。如果您试图假装缓冲区包含实际wchar_t
但输入流不包含wchar_t
s,那么它将没有意义。对此的解决方案是:不要那样做。
最后,TCHAR
在过去15年中并不相关。根据您的需要使用char
或wchar_t
。