2011-05-07 5 views
1

Im en utilisant la fonction win32 ReadFile:Comment convertir le type CHAR (char) win32 en chaîne std?

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

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

catcing maintenant im la réponse de stdout pour lpBuffer avec ce que je veux le convertir en chaîne std, le problème est quand je fais simple:

std::string szReturnlpBuffer(lpBuffer); 

la valeur du szReturnlpBuffer contient beaucoup de carecthers de garbege après la vraie chaîne: son ressemble à ceci: la valeur szReturnlpBuffer

"Im stdout du Qt applicationÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ"

ce im faire mal ici?

+0

Si c'est une application Qt, pourquoi ne pas utiliser QString? – CMircea

Répondre

3

Vous devez spécifier la taille de la chaîne:

std::string szReturnlpBuffer(lpBuffer, nBytesRead); 

car sinon il lit jusqu'à ce qu'il trouve un caractère nul, ce qui provoque un comportement non défini quand il est en dehors de la mémoire de lpBuffer.

+0

merci beaucoup pour votre gentillesse – user63898

0

Vous devez mettre fin à la chaîne avec un caractère nul:

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

Que faire si 'nBytesread == sizeof (lpBuffer)'? – ybungalobill