2010-05-20 2 views
0

나는 다음 코드 줄을 상속 : 처음 3 바이트는 항상 동일합니다하지만 (쓰레기 값으로 가득로ZeroMemory() 이후에도 TCHAR에 왜 쓰레기가 있습니까?

TCHAR temp[300]; 
GetModuleFileName(NULL, temp, 300); 

그러나,이 순서대로, -13, -128, 23 실패). 잘 했어. 다음과 같이 변경했습니다.

TCHAR temp[300]; 
ZeroMemory(temp, 300); 
GetModuleFileName(NULL, temp, 300); 

가비지 값이 유지되었습니다. ZeroMemory() 호출 후에는 다른 모든 바이트가 제대로 제로화되고 GetModuleFileName() 이후에 디렉토리가 버퍼에 제대로 저장되었습니다. temp가 temp + 3으로 대체되는 것과 같습니다. 이것은 단어 경계와 관련이있을 수 있습니까?

누군가 무슨 일이 일어나고 있고 어떻게 수정해야하는지 설명 할 수 있습니까?

+0

그리고이 세 가지 쓰레기 값 다음에 무엇을 볼 수 있습니까? 의미있는 것이 있습니까? – AnT

+0

ZeroMemory() 이후에는 0으로 채워지고 GetModuleFileName() 이후에는 디렉토리가 있습니다. 나는 그것을 반영하기 위해 게시물을 편집 할 것입니다. – samoz

+1

아마도 그 문자가 의미있는 문자일까요? – GManNickG

답변

1

ZeroMemory은 바이트 단위로 작동하지만 배열은 300 TCHAR입니다. 이것은 내가 widechar (멀티 바이트가 아님) 컴파일 옵션으로 작업하고 있다고 가정합니다.

당신은 사용해야

ZeroMemory(temp, 300 * sizeof(TCHAR)); 

또는 특정 경우에

:

ZeroMemory(temp, sizeof(temp)); 

그러나 후자에주의. temp이 함수 내에서 선언이 표시되는 자동 배열 인 경우에 적용됩니다. 컴파일러에서 할당 크기가 "보이지 않음"인 포인터 인 경우 - sizeof은 포인터 크기 만 제공합니다.

+0

그게 마지막 150 wchar_t가 왜 쓰레기 였는지 설명 할 수 있습니다. – MSalters