c++ - 如何将 win32 CHAR(char) 类型转换为标准字符串?

标签 c++ winapi stdout std

我正在使用 win32 函数 ReadFile:

CHAR lpBuffer[256];
DWORD nBytesRead;
DWORD nCharsWritten;

ReadFile(hPipeRead,lpBuffer,sizeof(lpBuffer),
                                      &nBytesRead,NULL) || !nBytesRead)

现在我正在捕捉从 stdout 到 lpBuffer 的响应,我想将它转换为 std 字符串,问题是当我做简单的时候:

std::string szReturnlpBuffer(lpBuffer); 

szReturnlpBuffer 的值在真实字符串之后包含大量垃圾信息: 它看起来像这样的 szReturnlpBuffer 值:

"Im stdout from the Qt applicationÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ"

我在这里做错了什么?

最佳答案

您需要指定字符串的大小:

std::string szReturnlpBuffer(lpBuffer, nBytesRead); 

因为否则它会一直读取直到找到一个空字符,当它超出 lpBuffer 的内存时会导致未定义的行为。

关于c++ - 如何将 win32 CHAR(char) 类型转换为标准字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5921186/

相关文章:

c++ - cmake 最小压缩链接

c - 为什么 strcmp 不能与 Process32NextW 一起使用?

c - FD_ACCEPT 如何接受多线程的连接请求?

wcf - 停止服务时客户端 CPU 几乎达到 100%

c++ - 终端文本编辑器的用户界面是如何实现的?

python - 如何使用 name 属性实例化 io.TextIOWrapper 对象?

java - 我可以在不使用循环的情况下从Java中的单行输入读取多个整数吗

c++ - 为什么允许在构造函数中对临时变量进行C++引用?

c++ - 我可以在这个模板中删除这个类成员吗?

c++ - 所以我无法理解 C++ 中的文件