pDest = dest = (char *)malloc(sizeof(pStr)+1);
sizeof(pStr) 이 구문은 다음과 같이 해석될 수 있습니다.
sizeof(char *)
따라서, pionter 사이즈(컴파일러마다 다를 수 있음, 4byte )를 반환합니다.
char *의 문자열의 크기를 구하고 싶다면 문자열의 크기를 반환하는 함수를 사용하시기 바랍니다.
아울러, nested assigned 은 컴파일러 마다 다를 수 있기에 다음과 같이 쓰는 것이 좋습니다.
dest = (char *)malloc(sizeof(pStr)+1);
pDest = dest ;
따9 님이 쓰신 글 :
: 한글이나 영문자등의 문자열을 역으로 출력하는 reverse 함수를 만들려 하는데...
: 아래 소스를 Turbo c 에서 돌리면 경고도 없고 잘 돌아 갑니다..
: 근데 .. 비주얼 씨에서 돌리면 경고도 없고 아무 이상이 없는데..
: 실행하면.. 메모리 에러가 나는 군요...
: 동적 할당한 부분을 해제하려 하면 에러가 납니다..
: 아시는분 계심 부탁드립니다... 그럼 즐프...
: ---------------------------------------------------------------------//
: #include <stdio.h>
: #include <string.h>
: #include <malloc.h>
:
: void hstrrev(char *pStr)
: {
: char *dest,*pDest;
: int len=0, i=0;
: pDest = dest = (char *)malloc(sizeof(pStr)+1);
: strcpy(dest,pStr);
:
: for(;*dest;dest++)
: len++;
: dest--;
:
: while(1)
: {
: if( (*dest & 0x80) != 0)
: { // 2바이트 이동...
: strncpy(pStr+i,dest-1,2);
: len -= 2;
: dest = dest-2;
: i=i+2;
: }
: else
: { // 1바이트 이동...
: strncpy(pStr+i,dest,1);
: len--;
: dest--;
: i++;
: }
: if(len == 0) break;
: }
:
: strcpy(pStr+i,"\0");
: free(pDest);
: }
:
: void main()
: {
: char str3[100] = "피노키오abc";
: puts(str3);
: hstrrev(str3);
: puts(str3);
: }
|