inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

홍정모의 따라하며 배우는 C언어

11.4 문자열을 입력받는 다양한 방법들

(강의 6:00) 문자열을 입력할 때에도 내부적으로 뒤에 \0이 붙나요?

해결된 질문

295

픽린

작성한 질문수 22

0


코드를 실행해보면 위와 같다.
처음에 char타입 배열 words를 선언하고, 그 공간에 "hello world\n"를 입력하면
gets( )함수가 한번에 버퍼를 읽어들인 뒤 내부적으로 \n을 제거하고(받지않고) \0를 추가시켜서 "hello world\0"를 배열 words에 저장한다.
"START\n"가 출력되고
"hello world"가 출력되고
바로 이어서 "hello world"가 출력된 뒤 줄바꿈(\n)이 된다.
마지막으로 "END"가 출력된다.

1. 강의 6:00 부분입니다. 제가 위에 작성한 것처럼 내부적으로 처리되는 과정을 적어보았는데, 여기서 생긴 궁금한 부분이 "문자열을 입력했을 때에도 내부적으로 뒤에 \0를 붙여서 처리해주는가?"입니다.

보통 코드 상으로 어떤 char타입의 배열을 선언하고 거기에 문자열을 대입한다고 했을 때 자동적으로 내부적으로는 뒤에 \0이라는 null character가 붙습니다.

그런데 이것이 콘솔 창에서 입력해주었을 때도 마찬가지로, 내부적으로 입력한 문자배열+\0으로 처리해주는지 궁금합니다.

만약 그렇다면, gets( )함수가 words를 입력받고 \n가 입력되는 순간, "hello world\0+\0"으로 저장이 될 것입니다.

2. 콘솔창에 printf( )함수로든 puts( )함수로든 출력이 될 때, 문자열에 (내부적으로 저장되어있는) null character(\0)도 마찬가지로 입출력 버퍼에 저장되는 것은 동일한데
출력 시 콘솔 창에 표현이 안되고
단순히 hello worldhello world로 표시가 되는것인지 궁금합니다.
이것이 사실 콘솔창에 \0도 출력되는 것이지만, 공백이 아니라 말그대로 null character이기 때문에 표시되지 않는 것처럼 보이는 건가요?

c

답변 1

0

강민철

안녕하세요,

1.

gets() 문자열을 입력받는 경우 자동으로

null character가 붙습니다.

아래의 링크를 참고해보시기 바랍니다.

https://stackoverflow.com/questions/54772430/does-the-gets-function-in-c-automatically-add-a-null-character-at-the-end-of-t

§ 7.19.7.7, The gets function

The gets function reads characters from the input stream pointed to by stdin, into the array pointed to by s, until end-of-file is encountered or a new-line character is read. Any new-line character is discarded, and a null character is written immediately after the last character read into the array.

 

그렇기에 "gets()함수가 words를 입력받고 \n가 입력되는 순간" 이라는 상황에서는 \0 + \n이 될 것입니다.

2.

콘솔창에 제어문자는 본래 표현되지 않습니다.

일례로 \n 을 들 수 있겠습니다.

이는 개행을 해줄 뿐, 어떤 눈에 보이는 출력의 대상이 아닙니다.

(말 그대로 제어를 위한 문자이지요)

마찬가지로 \0의 경우도 문자열의 끝을 표기하기 위한 수단일 뿐이기에

콘솔창에 \0라고 출력되지는 않는 것입니다.

0

픽린

백슬래시로 표현되는 것들이 제어문자이고, 이것은 '제어'로서의 기능만 할 뿐 출력의 대상이 아니라는 개념을 항상 인지하고 있어야겠습니다. 확실히 이해할 수 있었습니다. 감사합니다.

Export template 안됨

1

65

2

완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.

1

95

3

main 함수에서 왜 int만 선언이 되는걸까요

1

84

2

8비트 2진수 변환시 왜 1을 더해야하나요?

1

81

2

혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?

1

80

1

프로토타입과 함수간의 인자 불일치

1

87

2

12.12 헤더 관련 질문

1

74

2

Visual Studio Community 2026 사용 문의

1

171

2

Q. 15:30, 부호가 있는 8비트 정수 질문

1

73

2

getchar(), putchar()

1

112

3

강의자리ㅛ

1

93

2

비주얼스튜디오코드로 공부해도 상관없나요?

1

131

2

소스파일안에 여러 파일

1

88

2

F5와 F7의 차이

1

91

2

c = TWO * (a+b); 에서 a와 b는?

1

68

2

; 세미콜론을 붙이는 기준에 문의

1

78

1

Step over 기능 문의

1

65

2

2.6 강의 따옴표 출력 규칙 문의

1

87

2

int main 함수 관련 오류 문의

1

78

2

13.4 words[0]

0

73

2

11.7 함수를 구현해 봤습니다.

1

67

2

11.6 직접 strcmp와 strncmp를 구현해 보았습니다.

1

71

2

11.6 my_strcat과 my_strncat을 구현해봤습니다.

1

61

2

11.6 fit_str함수를 구현해 봤습니다.

1

60

2