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

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

지현님의 프로필 이미지

작성한 질문수

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

구조체

6분 29초 코드 예제 질문

해결된 질문

작성

·

45

0

안녕하세요 6분 29초에 구조체를 여러개 넣는 배열에서 질문이 있습니다

메인함수 7번째 라인 즉,
cars[0]/model[i] = '\0' //문자열 종료 문자

가 코드에서 어떤 역할을 하는 지 여쭤봅니다
그 위 2줄에 for문을 돌면서 널문자를 만날 때 까지 돌면서 이름을 가져오는데 7번째 라인은 어떤 의미인지 궁금합니다

감사합니다

답변 2

0

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

cars 배열의 첫번째 요소의 모델에 모델 이름을 넣는 과정입니다.

지금 modelName은 보신 것처럼 Mercedes-Benz라는 문자열이고, 여긴 \0가 맨 끝에 숨겨져 있습니다.

아래 반복문을 돌면 \0을 만나면 반복문이 거짓이 되어 해당 인덱스의 요소를 가지고와서 cars[0].model[i] 번째에 넣지 못합니다. 무슨 말이냐면 마지막의 \0 문자로 끝에 넣지 못합니다.

반복문이 거짓이 되어 할당을 못했으니까요.

 

그래서 그 다음 줄에서 해당 인덱스에 \0을 넣는 것입니다.

이게 가능한 이유는 2가지입니다.

  1. 반복문 바깥에서 i가 선언되었고, 반복문에서 0으로 시작해서 동작했기 때문에 i라는 변수는 반복문이 끝나도 사라지지 않고 살아있음.

  2. 마지막 \0 문자의 타이밍일 때, i는 반복문에서 ++가 되었기 때문에 현재 \0을 가리키는 인덱스가 된 상태고, 반복문의 조건에서 거짓이므로 할당하지 못했으나 i는 "여전히 \0을 가리키고 있는 인덱스"

그래서 아래에서 i라는 변수를 이용해서 문자열 마지막에 \0로 막는 것입니다.

0

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

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

질문하신 cars[0].model[i] = '\0'; 코드의 역할에 대해 설명 드리겠습니다. 이 코드는 문자열을 종료하기 위한 역할을 합니다. C 언어에서 문자열은 char 배열로 처리되며, ‘문자열의 끝’을 명시하기 위해 ‘null 문자’('\0')를 사용합니다.

코드의 의미

  • ‘for’ 루프 동작: for문을 통해 문자열의 각 문자를 배열에 복사합니다. 이 과정은 null 문자 ('\0')를 만날 때까지 계속됩니다.
  • 문자열 종료: 루프가 종료된 후에는, 현재의 인덱스 i 위치에 '\0'을 넣어 문자열의 종료를 명시합니다. 이를 통해 해당 문자열이 어디까지인지 컴파일러가 이해할 수 있게 됩니다.

유사 질문과 추가 설명

비슷한 주제를 다룬 몇 가지 질문을 참고해 보세요:
- 섹션2 구조체 질문: 이 질문에서는 문자열의 끝을 '\\0' 으로 명시하는 것과 문자열 처리 방법에 대한 설명이 여럿 있습니다.
- 5분55초 내용 질문있어요: 구조체 내의 배열을 이용해 문자열을 복사하는 방법과 종료 문자를 사용하는 이유를 다루고 있습니다.

이 게시물들을 참고하시면 구조체와 문자열 처리 방법에 대한 개념을 더 명확하게 이해하실 수 있을 것입니다.

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

지현님의 프로필 이미지

작성한 질문수

질문하기