본문 바로가기

C 언어

공백 문자열과 빈 공간 문자열의 차이

C 언어에서 "공백 문자열"은 일반적으로 길이가 0인 문자열을 의미한다.

공백 문자열은 문자 '\0' 하나만을 포함하며, 이 문자는 문자열의 끝을 나타내는 널 종료 문자(null terminator)이다. 

1. 표현 방식

공백 문자열은 "" 로 표현된다.

char emptyString[] = ""; || const char* emptyStringPtr = "";

 

2. 메모리 크기

공백 문자열은 메모리에 하나의 바이트를 차지하며, 이는 널 종료 문자('\0')임 

3. 용도

공백 문자열은 종종 문자열을 초기화할 때 사용되거나, 함수의 리턴 값으로 문자열이 비어 있음을 나타낼 때 사용된다.

4. 공백 문자열과 관련된 함수

strlen

: 문자열의 길이를 계산하는 함수. 공백 문자열의 길이는 0임

char empty[] = "";
printf("Length: %zu\n", strlen(empty));  // 출력: Length: 0

strcpy & strncpy

문자열을 복사하는 함수. 공백 문자열을 다른 문자열에 복사하면 대상 문자열도 공백 문자열이 됨

char str[10];
strcpy(str, "");  // str 이 공백 문자열로 설정됨
printf("str is '%s'\n", str);  // 출력: str is ''


strcmp & strncmp

두 문자열을 비교하는 함수임. 공백 문자열을 다른 공백 문자열과 비교하면, 결과는 0 (동일)이 된다. 

char empty1[] = "";
char empty2[] = "";
if (strcmp(empty1, empty2) == 0) {
    printf("The strings are identical.\n");  // 출력: The strings are identical.
}

 

 

주의 사항:
공백 문자열과,  "빈 공간을 포함한 문자열"을 혼동하지 않도록 주의해야 한다. 둘의 차이가 뭐냐고 ? 

예를 들어, 빈 공간을 포함한 문자열의  경우  " "는 공백 문자 하나를 포함하는 문자열로, 길이가 1이다.

공백 문자열은 길이가 0이라는 점에서 많은 차이가 있음! 

 
문자열을 다룰 때는 항상 널 종료 문자('\0')를 고려해야 하며, 이는 모든 C 문자열의 필수 요소이다.
공백 문자열은 문자열의 초기 상태나 특정 조건에서의 반환 값 등을 표현하는 데 자주 사용된다.

어떤 상황에서 쓰이는지 예시별로 정리하였다. 

 

예시 1: 문자열 초기화

문자열 변수를 선언할 때 공백 문자열로 초기화하여, 해당 변수가 안전하게 빈 상태에서 시작되도록 할 수 있다. 

#include <stdio.h>
#include <string.h>

int main() {
    char buffer[100] = "";  // 버퍼를 공백 문자열로 초기화

    // 버퍼 사용 전의 상태 출력
    printf("Initial buffer state: '%s'\n", buffer);
    
    // 버퍼에 데이터 쓰기 시도
    strcpy(buffer, "Hello, world!");
    printf("Buffer after copying: '%s'\n", buffer);
    
    return 0;
}


예시 2: 함수에서 공백 문자열 반환

어떤 조건이 만족되지 않을 때 함수에서 공백 문자열을 반환하는 예이다. 이 경우, 함수는 공백 문자열을 가리키는 포인터를 리턴할 수 있다. 

#include <stdio.h>

const char* getMessage(int code) {
    switch (code) {
        case 1:
            return "Success";
        case 2:
            return "Error: Invalid operation";
        default:
            return "";  // 기본값으로 공백 문자열 반환
    }
}

int main() {
    int code = 3;
    const char* message = getMessage(code);
    
    if (message[0] == '\0') {  // 메시지가 공백 문자열인지 체크
        printf("No message for code %d\n", code);
    } else {
        printf("Message: %s\n", message);
    }
    
    return 0;
}


예시 3: 입력 값 검증 후 초기화


사용자로부터 입력을 받고, 입력이 유효하지 않은 경우 문자열을 공백 문자열로 초기화하는 예이다. 

#include <stdio.h>
#include <string.h>

int main() {
    char userInput[256];
    printf("Enter your name (no digits allowed): ");
    fgets(userInput, sizeof(userInput), stdin);
    userInput[strcspn(userInput, "\n")] = '\0';  // 개행 문자 제거

    // 입력 값 검증
    for (int i = 0; userInput[i] != '\0'; i++) {
        if (isdigit(userInput[i])) {
            strcpy(userInput, "");  // 유효하지 않은 입력 처리
            break;
        }
    }

    if (userInput[0] == '\0') {
        printf("Invalid input provided.\n");
    } else {
        printf("Hello, %s!\n", userInput);
    }
    
    return 0;
}