char* 문자열 버퍼 초기화의 내부

김포프 2011-06-09

내가 예전에 문자열을 초기화 하던 방법:

char temp[64];
temp[0] = 0;

몇년 전에 캡콤 밴쿠버에서 일할 때, 동료 프로그래머 하나가 다음의 방법이 더 낫다고 귀뜸해줬다.

char temp[64] = {0, };

그 친구가 이 방법이 나은 이유를 말해줬던 거 같은데 사실 기억은 안나고… -_-
그냥 그 뒤로 줄곧 이 방법을 사용해왔다. 뭐 더 나은 방법이라니까….

근데 최근에 우연히 이 방법이 왜 더 나은지를 알게되었다.

Xbox 360에서 프로파일 캡춰를 하던 도중 위의 코드가 컴파일되면 어떻게 변하는지를 찾아냈으니… 그건 바로 다음과 같다:

char temp[64];
memset(temp, 0, sizeof(char) * 64);

흥미로운 사실.. memset이 호출된다.
이 방법은 5~10 마이크로세컨드 정도가 걸리는데 사실 뭐 그리 걱정할 정도는 아니다.

근데 생각해보면 char 버퍼 선언 뒤에 곧바로 strcpy 등의 함수를 호출한다면 굳이 위와 같은 초기화는 할 필요가 없다고 생각된다.
(뭐가되든 null 캐릭터가 들어가기만 하면 되니까…)

img

제대로 대우받는 개발자 | 부족한 컴공지식 배우기 | MIT급 컴공인강

최저임금으로 고통받는 일회성 프로그래머는 그만! POCU 아카데미가 올해 연봉협상을 책임지겠습니다!