1. 동적 할당
char *CreateText()
{
        char *Buffer=(char)malloc(sizeof(char)*16);
        strcpy(Buffer,"hello. world!");
        return Buffer;
}
        => Buffer문자열이 동적 메모리를 잡고 있으므로, CreateText의 리턴값을 받은 후 그것을 반드시 free해줘야 합니다. 자신이 만든 함수라면 귀찮게라도 쓸 수 있지만, 타인이 만든 함수를 라이브러리 형태로 쓰는 경우, 까먹을 확율이 높습니다.

2. 정적할당
char *CreateText()
{
        char Buffer[16];
        strcpy(Buffer,"hello. world!");
        return Buffer;
}
        => Buffer 문자열 변수의 수명이 CreateText함수가 종료될때까지이므로, 리턴된 값이 보존 되지 않을 수도 있습니다.


이런 함수를 쓰려면 어떻게 해야 합니까?

일단 생각나는 방법으로는
3. 리턴값 대신, 인수로 배열의 포인터를 받아 그것에 기록합니다. C에서는 이것이 가장 많이 쓰이는듯 합니다만, 대신 인수로 배열>의 포인트 뿐만이 아닌, 배열의 크기도 넘겨줘야 오버플로우 에러를 방지할 수 있습니다.
4. CString 같은 클래스를 생성하고, 생성자-소멸자에서 동적 메모리를 잡고 풀어줍니다. (제가 부족해서 그런지, C++에서 Class를 >쓴다 하면, 상속, 접근성보다 생성자-소멸자 때문인 경우가 많습니다.)


이런 부류의 함수를 이용하려면 3, 4번 방법 밖에 없는 건가요?