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

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

김다훈님의 프로필 이미지
김다훈

작성한 질문수

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

함수(메서드) 선언과 호출

데이터 참/거짓 강의 질문

해결된 질문

작성

·

175

0

문자열 배열에서 \0(null) 을 붙임으로써 문자열이 끝났음을 알 수 있다고 하셨는데 그럼 첫번째 문자열배열 str1의 경우엔 왜 널값이 안붙나요? 배열에 각각 문자가 하나씩 들어가는것과 문자열이 한번에 한칸에 다 들어가는 차이 때문인가요? 명확한 해설 부탁드려요.

답변 3

0

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

아, 데이터 참/거짓 영상이신데

질문 자체가 영상 <함수(메서드) 선언과 호출>에 연계되어 있어서 헷갈렸습니다.

 


 

문자열로 선언하는 경우 (배열 아니고) "Hello"로 하는 경우에는 알아서 '\0'이 들어가있습니다.

하지만 배열로 하나씩 넣는 경우에는 보통 마지막에 의도적으로 '\0'을 넣어서 문자열의 끝을 만들어줍니다.

(예를 들어 배열 100칸짜리를 만들어 두고, 5개만 할당했을 때는 '\0'을 넣어서 끝을 알려주기 위해서 그렇게 할 수 있습니다.)

그런데 아래와 같이 하면 sizeof 문자열 했을 때 5가 나오면서 전체가 정상적으로 출력이 되긴합니다.

#include <stdio.h>

int main() {
    // 문자 배열을 선언합니다.
    char str[] = {'h','e','l','l','o'};
    
    // 결과를 출력합니다.
    printf("%d\n", (int)sizeof(str));
    printf("%s\n", str);
    
    return 0;
}

그러니까 엄밀히 말하면, 쓰지 않아도 정상적으로 동작은 합니다.

하지만 저렇게 디테일하게는 문제에 나오지 않으니, '\0'을 안 넣어도 동작은 하는구나 정도로 알고 계시면 되겠습니다.

0

김다훈님의 프로필 이미지
김다훈
질문자

2분초반이요~ 2분 2초쯤 str1[]="Hello"

str3[] 차이요

0

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

혹시 영상에서 몇 분 몇 초 대일까요?

김다훈님의 프로필 이미지
김다훈

작성한 질문수

질문하기