inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

섹션2 구조체 질문

해결된 질문

158

김다훈

작성한 질문수 11

0

1000043198.jpg코드에서 마지막 줄에 문자열 종료를 메모하셨는데,

문자가 한글자씩 배열돼서 문자열이 종료됐다는 걸 마지막 줄 처럼 표시해야하는 건가요?

수강 첫 질문이 문자열에 null을 표시해야하는 경우에 대해 여쭤보는 거였는데 아직도 많이 헷갈립니다.

제대로 된 지식이 아직 머리에 없는 채로 코드 해석을 하다가 마지막줄을 보자마자 mycar.model[i]=\0 를 보고 배열을 null값으로 싹 비워버리는 줄 알았네요...ㅎ

 

python java c 정보처리기사

답변 1

0

주말코딩

안녕하세요,

올려주시는 질문들이 하나하나 촌철살인입니다.

굉장히 디테일하면서도 헷갈릴만한 것들을 딱 짚어서 질문해주시네요.

 

우선 반복문이 끝나도 i가 없어지지 않는 것은 이해하셨을까요?

i가 반복문 밖에서 태어났기 때문에 반복문이 죽어도 그 값을 그대로 가지고 있습니다.

원래 대부분의 반복문 예시는 초기자에 아예 int i=0; 이런식으로 써서 반복문이 끝나면 해당 변수의 메모리 공간도 없애버리면서 다 같이 죽여버립니다. 변수의 생명주기를 눈여겨 보셔서 주의하셔야 합니다.

 

문자 길이가 너무 길어서, 3개짜리인 abc로 예시를 들어보겠습니다.

char example[] = "abc"; 이렇게 되어있습니다.

 

이제 이 배열을 인덱스를 통해서 반복문을 수행하려고 합니다.

인덱스는 0부터 시작하고, 0은 첫번째 요소인 a를 뜻합니다.

앞의 temp는 임의의 char가 50으로 들어가는 배열이라고 생각하시면 됩니다. char temp[50];

1평짜리 빈 원룸을 50개 쭉 붙여놨습니다.

 

아래의 제가 작성한 예시코드는 질문주신 영상 속 코드와 구조가 정확히 똑같은 코드입니다.

우리가 하고 싶은 것은 50개짜리 빈 공간에 제가 원하는 문자열을 복사해서 넣는 것입니다.

그것도 반복문으로 인덱스를 돌면서 하나하나 수동으로요.

 

for(i = 0; example[i] != '\0'; i++) {
     temp[i] = example[i];
}
temp[i] = '\0'; // 문자열 종료 문자

temp[0]에 example[0]의 값을 넣습니다.

temp[1]에 example[1]의 값을 넣습니다.

temp[2]에 example[2]의 값을 넣습니다. 그리고 i는 3이 되었습니다.

( example[2]는 NULL이 아니기 때문에 윗 줄이 실행되었고, 실행문이 끝나면 i값을 2 → 3로 증가시킴 )

 

그 다음에 example[i]는 example[3]이 되어있습니다.

example[3]은 '\0' 입니다. 그래서 반복문을 빠져나옵니다.

 

문제가 있습니다. temp[3]은 빈공간입니다.

그런데 반복문이 널문자를 할당하기 전에 반복문의 조건이 false가 되어서 수행하지 않고 종료되었습니다.

 

문자열이 끝났다는 NULL을 넣어줘야지 어떤 방식으로 출력하든 정상적으로 출력될 수 있습니다.

그래서 강제로 현재 i값을 이용하여 temp[3]에다가 '\0'을 넣어줍니다.

 

temp는 50칸짜리 공간이었지만, 이제는 정상적으로 %s나 %c+반복문으로 출력이 가능합니다.

왜냐하면 4번째 칸 (인덱스로는 3)에 '\0'이 정상적으로 위치해있기 때문이죠.

 

이제 %s로 출력해도 문자열 메모리의 첫 부분부터 죽 읽으면서 4번째 칸의 널을 만나서 정상적으로 종료하면서 잘 수행하겠네요.

 

이해에 도움이 되셨을까요?

0

김다훈

친절한 답변 감사드립니다.

그러면 제가 이해한 바로는

사진에서 mycar.Model[i] = \0 이건

Model이라는 배열 자체를 Null 값으로 엎어치라는 뜻이 아닌,

"Null 값이 들어간 i번째 항" 을 한번 더 확실히 명시해주는 건가요?

반복문 내에서는 이미 i++까지 실행된거고

빠져나온 상태라면 그런 것 같아서요.

기본적인 배열에서는 0번째항부터 시작하니

i-1인데 저건 i번째가 맞나..요

(잘 모르겠네요 ㅎㅎ)

 

0

주말코딩

"Null 값이 들어간 i번째 항" 을 한번 더 확실히 명시해주는 건가요? <- 이게 무슨 말씀이신지 잘 모르겠습니다.

 

일단 지금 앞에서 대입을 당하고 있는 50짜리칸 temp 공간에는 '\0' 자체가 없습니다.

그냥 칸으로 따지면

인덱스 : 0 | 1 | 2 | 3 | ......
값: a | b | c | 비어있음 | 비어있음 | ....

이렇게 되어있는 상태에서 반복문을 빠져나오면 i는 3이 되어있습니다.

인덱스 3은 4번째죠? 지금 비어있는 곳으로 활용할 수 있습니다.

 

그래서 i를 활용하여 temp의 가장 마지막 빈 곳에 '\0'을 넣어주는 것입니다.

필기자료 사라졌나요?(실기 일주일만에 안돼서 재도전-_-)

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