Как преобразовать тип win32 CHAR (char) в строку std? - PullRequest
1 голос
/ 07 мая 2011

Я использую функцию 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 после реальной строки: это выглядит так: значение szReturnlpBuffer:

"Im stdout из приложения QtÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ"

что я здесь не так делаю?

Ответы [ 2 ]

3 голосов
/ 07 мая 2011

Вам необходимо указать размер строки:

std::string szReturnlpBuffer(lpBuffer, nBytesRead); 

потому что в противном случае он читает, пока не найдет нулевой символ, что вызывает неопределенное поведение, когда он выходит за пределы памяти lpBuffer.

0 голосов
/ 07 мая 2011

Вам необходимо завершить строку нулевым символом:

lpBuffer[nBytesread] = '\0';
...