【问题标题】:Gibberish from ReadFile()?来自 ReadFile() 的胡言乱语?
【发布时间】:2015-07-24 02:34:30
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 您如何确定缓冲区收到“乱码”?
  • @MattMcNabb 这些字是看不懂的。
  • @buttifulbuttefly 是 wchar_t。
  • @zzy 你是如何阅读它们的?你能展示你用来阅读它们的代码吗?
  • @MattMcNabb 和msdn.microsoft.com/zh-cn/library/windows/desktop/…一样,只是把缓冲区改成tchar,子进程是java.exe(运行.jar游戏)。

标签: c++ readfile tchar


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 子进程的输出好像不能转移到TCHAR
猜你喜欢
  • 2012-09-11
  • 1970-01-01
  • 1970-01-01
  • 2011-09-25
  • 2018-12-21
  • 1970-01-01
  • 2014-04-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多