C C++

스트링 버퍼를 선언과 함께 초기화

_침묵_ 2006. 4. 17. 23:51

함수 내에서 로컬변수로 스트링 버퍼를 사용할 때 사전에 반드시 초기화를 해야한다는 것은 누구나 알고 있다.
아마 대부분은 다음과 같은 방법으로 버퍼를 초기화 할 것이다.

 

void do_something_function()
{
    char szBuffer[MAX_BUF_SIZE];
             ....
 
    memset(szBuffer, 0, sizeof(szBuffer));
             ....    
}

 

그러나 버퍼를 선언함과 동시에 초기화가 이루어지도록 하면 다음과 같이 선언하면 된다.


char szBuffer[MAX_BUF_SIZE] = {0};
char szBuffer[MAX_BUF_SIZE] = {};
char szBuffer[MAX_BUF_SIZE] = "";

 

스트링 버퍼를 로컬이 아닌 글로벌로 선언하면 초기화를 명시하지 않아도 모두 0으로 초기화가 된다. 이는 초기화 되지 않는 변수는 bss영역에 배치되는데 이는 c의 startup코드가 bss영역을 null로 초기화하기 때문이다. 그러나 이는 c의 표준인지 확실치 않으며 안전한 프로그래밍을 위해서는 글로벌 변수도 초기화하는 습관을 들이는 것이 좋다. --철이(Terry)

 

출처:http://home.dasomnetwork.com/~leedw