inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

(2026 최신!) 일주일만에 합격하는 정보처리기사 실기

포인터의 개념과 활용

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

해결된 질문

217

jins7267

작성한 질문수 3

1

강의 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)의 값은 같아질까요?

 

python java c 정보처리기사

답변 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)는 동일하다는 결과입니다.

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

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

정처기 필기 준비할때 이 이론을 다시 외워도 될까요?

0

44

2

조건 반복문 질문: for 문 ?

0

59

1

정처기 26-2회. 9번 질문드립니다!

0

77

1

이론 보면서 질문이 있습니다.

0

71

2

정보처리기사 실기 26년 2회 SRT 스케줄링 문제 단위 질문

0

86

2

유튜브(정보처리기사 실기 | 26년 2회 기출문제 코드 해설)

0

143

2

262 정처기 실기 C언어코딩

0

45

1

정보처리기사 262 실기 Hash(해시) 질문

0

77

2

static 변수 질문입니다.

0

60

2

파이썬 4강 질문입니다.

0

67

2

모의고사 1회 3번문제

0

87

3

41강 30:10

0

66

2

이론 공부법 질문 있습니다.

0

86

2

부모의 생성자 관련 질문

0

64

2

시험지 문제에 필기해도 되나요?

0

87

3

41강 11:23

0

58

2

4강파이썬 질문입니다

0

53

2

try-catch 핸들러명

0

64

2

36강 3:48

0

62

2

35강 18:27

0

65

2

자식 코드 내 super() 생략

0

59

2

출력질문

0

73

2

31강 4:06

0

64

2

파이썬 학습자료가 강의 자료와 다릅니다.

0

94

3