inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

포인터의 개념과 활용

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

해결된 질문

199

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

51

2

26년 1회 실기 해설 강의

0

68

2

53번 4-1 자료 오류 있는 것 같습니다.

0

73

2

7번문제

0

60

2

C언어 변형문제 9번문제 Pdf 수정요청

0

48

2

메서드 오버드라드

0

51

2

실수

0

46

1

공부 우선순위 우선강의 알려주세요

0

90

1

생성자 호출순서 강의 10번 문제 30분대 질문입니다

0

49

2

25년 2회 기출 5:40 질문입니다.

0

43

2

모의고사1회 3번 파이썬문제

0

75

2

C언어 출제변형 6번 문제

0

50

2

c언어 출제변형 강의 질문

0

32

2

28:40

0

34

2

C :  언어 배열과  문자열 수업자료

0

31

2

파이썬 리스트, 딕셔너리 질문

0

43

2

모의고사 관련 질문 건

1

69

3

자료 내용 오류

0

64

2

정적 변수, 정적 메서드(static) v2

0

51

2

v1.2 와 v0.91 PDF

0

104

1

업캐스팅 (부모형태, 자식생성자)

0

51

2

정보처리산업기사 준비중입니다.

0

74

2

실기 D -6

0

105

2

(기출) 2024년 2회 기출문제 - 이론 포함 22분32초 질문입니다

0

60

3