인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

jins7267님의 프로필 이미지

작성한 질문수

(2025) 일주일만에 합격하는 정보처리기사 실기

포인터의 개념과 활용

C언어 문자열 NULL값 (18:20)

해결된 질문

작성

·

108

·

수정됨

0

강의 18:20에서

char str1[5] = {'H', 'e', 'l', 'l', 'o'};

이게 이 전 강의인 배열과 문자열 강의에서 마지막에 '\0' 를 넣어줘야 문자를 인식한다고 이해했는데요

char str1[5] = {'H', 'e', 'l', 'l', 'o', '\0'}; 으로 안되어있어도 상관 없는건지 궁금합니다.

또한 저렇게 된다면 str1[6] 이 되어야하는 건가요?

제가 혼자 생각해본 바로는 만약 출력문에서

printf("%s" , str1[]) 로 출력을 하려고했다면

char str1[5] = {'H', 'e', 'l', 'l', 'o'}; 이것이 아닌

char str1[5] = {'H', 'e', 'l', 'l', 'o', '\0'}; 이렇게 선언을 하는게 맞는걸까요?

 

+그렇다면 만약 예제에서

char str1[] = {'H', 'e', 'l', 'l', 'o', '\0'}; 이었다면

sizeof(str1) 과 sizeof(str2)의 값은 같아질까요?

 

답변 2

0

주말코딩님의 프로필 이미지
주말코딩
지식공유자

안녕하세요, 이미 답을 알고 계신 것 같지만 답변 남겨드립니다.

 

알고 계신 것처럼, char str1[5] = {'H', 'e', 'l', 'l', 'o'};에서는 널 종료 문자가 없습니다. 이 배열은 문자 배열이지만 엄밀히 말하면 C 언어에서 "문자열"은 아닙니다.

C 언어에서 문자열은 반드시 널 종료 문자(\0)로 끝나야 합니다. 그래야 printf("%s", str1)과 같은 문자열 함수들이 문자열의 끝을 인식할 수 있습니다.

 

따라서 printf("%s", str1)으로 출력하려면

char str1[6] = {'H', 'e', 'l', 'l', 'o', '\0'};

와 같이 선언해야 합니다. 배열 크기도 6으로 늘려야 합니다.

 

만약 크기가 5인 배열에 5개의 문자와 널 종료 문자를 넣으려고 하면 배열 범위를 초과하게 됩니다.

 


char str1[] = {'H', 'e', 'l', 'l', 'o', '\0'};
char str2[] = "Hello";

 

이 경우 sizeof(str1)sizeof(str2)의 값은 동일합니다. 두 경우 모두 6바이트가 됩니다.

str2 = "Hello"의 경우, 컴파일러가 자동으로 널 종료 문자를 추가하므로 실제로는 {'H', 'e', 'l', 'l', 'o', '\0'}와 같이 저장됩니다.

 

문자열을 다룰 때는 널 종료 문자를 위한 공간을 반드시 고려해야 하며, 문자열 함수를 사용할 때는 널 종료 문자가 있는지 확인해야 합니다.

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. jins7267님.

C언어에서 문자열과 관련된 null 문자열 처리 및 크기 할당에 대한 질문을 주셔서 감사합니다. 몇 가지를 정리하면 다음과 같습니다.

Null 문자 (‘\0’)의 필요성

  • 문자열 종료를 위한 Null 문자: C에서는 문자열이란 내부적으로 문자 배열에 끝에 '\0'으로 끝나는 문자들의 나열입니다. 즉, printf("%s", str1); 로 문자열을 출력하려면 반드시 '\0' 바이트로 끝나야 정상적으로 종료를 인식할 수 있습니다.

  • 배열의 크기: 예제로 주신 char str1[5] = {'H', 'e', 'l', 'l', 'o'};'\0'이 없으므로 문자열로 취급받지 못하고, 문자 배열입니다. char str1[6] = {'H', 'e', 'l', 'l', 'o', '\0'};로 해야 str1이 문자열로 제대로 인식됩니다.

sizeof 연산자 관련

  • sizeof(str1): 배열 str1의 총 바이트 크기를 반환합니다. char str1[6] = {'H', 'e', 'l', 'l', 'o', '\0'}; 라면, 6바이트를 가집니다.

  • 만약 char str2[] = "Hello"; 라고 정의하면 마지막에 '\0'이 자동으로 포함되므로 실제 크기는 6이 됩니다. 이 경우 sizeof(str1)sizeof(str2)는 동일하다는 결과입니다.

이렇게 기존 질문들 참고를 통해 명확히 하는 방법도 도움이 될 것입니다. 비슷한 주제가 다뤄진 예시로는 아래 링크를 참고하실 수 있습니다:

질문이 해결되셨길 바라며, 추가적인 질문이 있으시면 언제든지 남겨 주세요.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

jins7267님의 프로필 이미지

작성한 질문수

질문하기