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

ghkd1118님의 프로필 이미지

작성한 질문수

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

배열과 문자열

배열과 문자열

해결된 질문

24.09.08 19:53 작성

·

55

0

10:11초 정도질문입니다.

[]대괄호안에 숫자가 들어가면, 문자배열의 공간수로 이해하였는데, 공란은 무슨의미인가요?

공란이있거나 숫자가 았거나 똑같이 풀이가되어 헷갈립니다.

그리고 %s 변수는 널값 ‘\0’ 이 나올때까지 문자 배열대로 쭉 출력하여야 하는데, 이게 항상 생략되는건가요? 생략되는 경우가 따로있나요?

답변 1

0

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

2024. 09. 08. 20:34

안녕하세요,

 

  1. 공란 []의 경우에는 뒤에 들어오는 변수에 딱 맞춰서 알아서 변동되는 크기를 가집니다. 이 경우에 몇 개의 문자를 넣어도 그것에 맞춰서 배열 공간을 잡아줍니다.

#include <stdio.h>

void printArray(int arr[], int size) {
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

int main() {
    int numbers[] = {1, 2, 3, 4, 5};  // 배열 크기는 자동으로 계산됨 (5개 요소)
    int size = sizeof(numbers) / sizeof(numbers[0]);  // 배열의 크기 계산

    printArray(numbers, size);  // 배열과 크기를 함수로 넘김

    return 0;
}

 

  1. '\0'은 우리 눈에 보이지 않고 프로그램 내부에서 가지고 있기 때문에 항상 생략되어 있다고 보시면 됩니다. 만약에 초기화를 변수 = "문자열" 로 했다면 무조건 맨 끝에 '\0'이 들어가 있습니다.

그런데, 이렇게 할 수도 있습니다. NULL을 명시적으로 넣지 않는 것입니다.

 

#include <stdio.h>

int main() {
    // 문자 배열 선언
    char str[6];  // 문자 5개를 넣을 공간을 마련, 마지막 null 문자는 넣지 않음
    int i;

    // 반복문을 통해 문자 배열에 'A'부터 'E'까지 넣음
    for (i = 0; i < 5; i++) {
        str[i] = 'A' + i;  // 'A', 'B', 'C', 'D', 'E' 순서대로 저장
    }
    // null 문자('\0')는 넣지 않음

    // %s로 출력
    printf("문자열: %s\n", str);

    return 0;
}

이 경우에는 정상적으로 출력이 되긴 합니다만, 컴파일러의 버전이나 프로그램 설계에 따라서 쓰레기값(이상한 값)이 출력될 수 있습니다.

 

대부분의 경우 정상적으로 출력이 되긴하나, 그렇지 않을 수도 있다는 이야기죠.

그래서 보통은 문자를 여러 개를 넣어서 문자열로 만들 때는 가장 마지막에 문자가 끝났다는 의미로 '\0'을 넣곤 합니다.

 

그리고 엄청나게 큰 배열을 먼저 선언하고(예를 들어 100) 거기에 5개의 문자만 넣을 때도 문제가 됩니다. 이 경우에는 어디가 끝인지 잘 모르기 때문에 6번째에 '\0'을 넣어서 문자열이 완료되었다고 표기하기도 합니다. 최근 이 예제가 기출문제로 등장했습니다.

 

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

ghkd1118님의 프로필 이미지

작성한 질문수

질문하기