2011-05-07 4 views
1

임은 Win32 함수 ReadFile을 사용하여 :win32 CHAR (char) 유형을 std 문자열로 변환하는 방법은 무엇입니까?

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

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

지금 메신저 catcing 내가 문자열을 수 std 변환하고자 이와 lpBuffer에의 표준 출력의 응답을, 문제는 내가 간단 할 때입니다 :

std::string szReturnlpBuffer(lpBuffer); 

szReturnlpBuffer의 값이 실제 문자열 뒤에 garbege의 carecthers을 많이 포함 이것을 szReturnlpBuffer 값과 같은 외모 :

"임은 Qt는 applicationÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ에서 표준 출력"

어떤 메신저 잘못 여기서 뭐? 그것은 외부 lpBuffer의 메모리를 얻을 때 정의되지 않은 동작이 발생 널 문자를 발견까지 그렇지 않으면 읽기 때문에

std::string szReturnlpBuffer(lpBuffer, nBytesRead); 

:

+0

, 왜 QString을 사용하지? – CMircea

답변

3

당신은 문자열의 크기를 지정해야합니다.

+0

친절하게 대단히 고마워요. – user63898

0
당신은 널 문자로 문자열을 종료 할 필요가

: 그것은 Qt는 응용 프로그램의 경우

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

'nBytesread == sizeof (lpBuffer)'라면? – ybungalobill

관련 문제