我正在使用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的值在真正的字符串之后包含很多garbege carecthers: 它看起来像是szReturnlpBuffer值:
“我是Qt applicationÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ“
我在这里做错了什么?
答案 0 :(得分:3)
您需要指定字符串的大小:
std::string szReturnlpBuffer(lpBuffer, nBytesRead);
因为否则它会一直读取,直到找到一个空字符,当它到达lpBuffer
的内存时会导致未定义的行为。
答案 1 :(得分:0)
您需要使用空字符终止字符串:
lpBuffer[nBytesread] = '\0';