42의 cpp01과제를 하다 의문이 생겼다.
그동안 열심히 사용해온 c에서는 문자열을 char *에 저장하고 해당 문자열의 마지막에는 항상 '\0'값이 존재했다.
c++로 넘어오면서 char *보단 편한 기능 많은 string을 사용해서 문자열을 처리하게 되었다. 그러면 string에서는 '\0' (null)값을 어떻게 처리할까?
조금만 검색해봐도 string은 \0이 필요하지 않다는 것을 알 수 있다. string 클래스에서 내부적으로 문자열의 사이즈를 가지고 있기 때문이다.
그렇기에 문자열의 끝을 알기위해 \0 이 필요가 없다.
다만 호환을 위해 메모리에는 맨 끝에 \0을 저장한다고 한다.
그래서 간단한 실험을 한 번 해보았다.
실험을 위해 간단한 코드를 통해 중간에 \0 이 들어간 파일을 제작했다.
#include <stdio.h>
int main()
{
FILE *file = fopen("example.txt", "wb");
if (file == NULL)
{
printf("파일을 열 수 없습니다.\n");
return 1;
}
fputc('a', file);
fputc('\0', file);
fputc('b', file);
fclose(file);
return 0;
}
example.txt 파일안에는 "a\0b" 가 들어가있다.
char *에 example.txt파일의 내용을 넣고 출력해보면 "a"만 출력이 될 것이다. 과연 c++에서 string에 저장을 해도 똑같이 동작할까?

위 사진은 string을 사용해 읽어온 문자열에서 b를 찾아 a로 바꿔주는 프로그램에 example.txt를 넣은 결과이다.
a와 b중간에 \0이 있음에도 정상적으로 ab를 출력하고 a를 b로 변환한 것을 확인할 수 있다.
.size()를 통해 사이즈를 확인한 결과 \0을 포함한 3이 나왔다.
결론 : c++의 string에서는 \0로 문자열의 끝을 판별하지 않는다.