본문 바로가기
C

[C언어] 문자열 복사 후, 왜 answer[s] = '\0';을 넣어야 하는가

by hyeeein 2025. 2. 28.

 

strncpy 함수

  • 지정한 길이만큼 문자열을 복사하지만, 복사한 문자열에 자동으로 널 종료 문자('\0')를 추가하지 않을 수 있음.
  • 하지만,  만약 복사한 길이가 정확히 s라면, 그 다음에 어떤 값이 있을 수 있기 때문에 answer[s]는 원하지 않는 값이 들어갈 수 있음.
  • 예를 들어, strncpy(answer, my_string, s);라고 하면 my_string의 앞 s개 문자를 answer에 복사. 하지만 복사한 문자열이 s개라면, 그 뒤에 answer[s]는 무엇인가 쓰일 수 있기 때문에 널 종료 문자를 수동으로 추가해야 함.

 

결국, 문자열을 제대로 처리하려면 끝에 '\0'이 있어야 한다.

C 문자열 함수들(strcat, printf 등)은 문자열이 '\0'으로 끝날 때까지 처리하므로, 문자열의 끝을 명확하게 알려줘야 한다. 만약 끝에 '\0'이 없으면, strcat 같은 함수는 문자열의 끝을 알 수 없어 예기치 않은 동작을 할 수 있다. 예를 들어, answer[s] = '\0';을 넣지 않으면 strcat(answer, overwrite_string);에서 이어붙일 위치를 정확히 알 수 없게 되기 때문이다.

 

(예시) my_string = "Hello, World!"이고, s = 7

// answer의 길이는 7. 하지만, 문자열이 끝났다는 표시인 '\0'이 없어서 그 뒤에 임의의 값이 들어갈 수 있음.
strncpy(answer, my_string, s);

// 이 후 answer[s] = '\0';을 넣어주면, answer는 "Hello, "로 정확히 끝나고, strcat 함수가 올바르게 덧붙일 수 있음.
answer[s] = '\0';