가끔은 아니고 좀 자주 하는 실수가 있다. 일단 예제를 들어보면,
// First source
TCHAR* makefilename(...)
{
TCHAR* tcFileName;
.... // popluate...
return tcFileName;
}
Or
// Second source
VOID makefilename(TCHAR** ppFileName)
{
TCHAR* tcFileName;
.........
*ppFileName = tcFileName;
}
위와 같은 경우이다. 가장 큰 실수는 Local 변수의 return 이다. Local 변수의 경우 함수 return과 함께 사라지게 된다. 즉, 위의 경우에 TCHAR* 로 선언된 point address 는 정리가 되며 이 address 를 넘겨받은 변수 역시 garbage value 를 가지게 되는 것이다.
first source 의 경우에는 compile error 가 나니 쉽게 fix 할 수 있지만, 두 번째의 경우에는 compile 이 되기 때문에 유의해야 한다. 또한, 두번째에서
*ppFileName = tcFileName
--> memcpy(*ppFileName, tcFileName, string_length);
로 변경해서 사용해야만, string value 를 제대로 return 할 수 있다. 사실 C 에서 string value 를 다루는 함수에서 그 값을 pointer address 로 return 하려면, 그 영역의 공간이 global 하게 선언되어 있던가 아니면 위와 같이 memcpy 를 이용해서 해줘야 한다.
[프로그래밍/C언어] 정수, 실수 데이터형 (0) | 2016.11.21 |
---|---|
C언어, C++, C#, JAVA, Visual C++, MFC, Direct X? (0) | 2016.11.16 |
[프로그래밍/C] scanf()로 공백도(정규식) 입력 받자! (0) | 2016.11.16 |
The Top 10 Ways to get screwed by the "C" programming language (0) | 2016.10.12 |
[프로그래밍/C] 포인터 총정리 (0) | 2016.10.11 |