파싱함수(?) 테스트 중에.

taroo의 이미지

일종의 파싱이랄까요.. 문자열을 받아서 문자열의 앞에서 문자열 첫 바이트에 들어있는 값 만큼 떼어내 버리고 리턴하는 함수입니다.

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
typedef unsigned char UINT8 ; 
static UINT8* _getString(UINT8** ptrBuf) 
{ 
UINT8 length = **ptrBuf; 
//버퍼의 첫번째 1바이트를 length에 저장 
UINT8* ret; 
**ptrBuf = 'x'; 
//버퍼의 첫번째 바이트를 초기화 
*ptrBuf = *(ptrBuf)+1; 
ret = *ptrBuf; 
//버퍼의 두번째 바이트 주소를 ret에 저장 
printf("ret %s\n", ret ); 
*ptrBuf += length; 

printf("prtBuf %s\n", *ptrBuf); 
return (UINT8*)ret; 

} 

int main() 
{ 
UINT8 * teststring; 

char ** pptest; 
char TestArr[4]; 

sprintf(TestArr, "%cab", 0x47); 

pptest = (char**)malloc(sizeof(char*)*400); 
*pptest = (char*)malloc(sizeof(char)*4); 
*(pptest+1) = (char*)malloc(sizeof(char)*4); 
memcpy(*pptest, TestArr, 4); 
memcpy(*(pptest+1), "cde", 4); 


printf("%s\t%s\n", *pptest, *(pptest+1)); 

teststring = _getString(pptest); 
printf("teststrign %s \n",teststring); 
printf("ptrBuf %s\n", *pptest); 

free(pptest); 

return 0; 

} 

Break Pointer를 넣어서 한 줄 씩 실행하게 되면, 제대로 출력되는데 그렇지 않으면 제대로 출력이 안됩니다.

환경 : Window XP / VC++ 6.0

이유가 뭘까요?