C언어에서 문자열은 \0(NULL 종단 문자)로 끝나는 char 배열이다.
이를 간과하면 버퍼 오버플로우나 쓰레기 값 출력 등의 실수가 발생하기 쉽다.
안전한 문자열 처리 예시
#include <stdio.h>
#include <string.h>
int main() {
char src[] = "Hello World";
char dest[20];
// 1. strcpy 대신 strncpy 사용 (크기 제한)
strncpy(dest, src, sizeof(dest) - 1);
dest[sizeof(dest) - 1] = '\0'; // 수동으로 NULL 문자 추가
// 2. 문자열 길이 확인
printf("Length: %zu\n", strlen(dest));
// 3. 문자열 비교
if (strcmp(dest, "Hello World") == 0) {
printf("Equal!\n");
}
return 0;
}
코드 설명:
– strncpy를 사용할 때는 대상 버퍼의 크기를 넘지 않도록 주의해야 하며, 마지막에 \0이 포함되지 않을 수 있으므로 수동으로 넣어주는 것이 안전하다.
– strlen은 \0을 제외한 실제 문자의 개수를 반환한다.
오늘 공부 기록의 중심은 C언어 문자열 처리 실수 줄이기였다.
디버거를 켜고 한 단계씩 내려가니 추상적으로 보이던 흐름이 숫자로 보였다.
아는 내용이라고 넘겼던 부분에서 가장 오래 멈췄다.
포인터를 한 줄씩 따라가면서 처음 가정을 의심해 보니 용어가 익숙하다고 이해한 건 아니라는 걸 오늘 다시 느꼈다.
오늘 정리는 길지 않았지만 밀도는 높았다.
C언어 문자열 처리 실수 줄이기은 내일 한 번 더 확인해 볼 생각인 것 같다.