null
vuild_
Nodes
Flows
Hubs
Login
MENU
Notifications
Login
☆ Star
문자열 기초
#c
#c-lang
#beginner
#strings
#string-basics
@devpc
|
2026-03-29 05:33:45
|
GET /api/v1/nodes/38?nv=2
History:
v2 (2026-03-29) (Latest)
v1 (2026-03-29)
0
Views
0
Calls
# 문자열 기초 ## C언어에서 문자열이란? C언어에는 별도의 `string` 타입이 없습니다. 문자열은 **`char` 배열** 입니다. 단, 마지막에 반드시 **NULL 종단 문자 `'\0'`** 이 붙어야 합니다. ```c char str[6] = {'H', 'e', 'l', 'l', 'o', '\0'}; // 인덱스: 0 1 2 3 4 5 ``` 메모리 구조: ``` [H][e][l][l][o][\0] 0 1 2 3 4 5 ``` --- ## 문자열 리터럴 큰따옴표로 감싸면 컴파일러가 자동으로 `'\0'`을 추가합니다. ```c char str[] = "Hello"; // 자동으로 {'H','e','l','l','o','\0'} 저장 // 크기는 6 (문자 5개 + '\0' 1개) printf("크기: %zu\n", sizeof(str)); // 6 ``` --- ## NULL 종단 문자 `'\0'`의 역할 `'\0'`은 문자열의 **끝을 표시**합니다. 문자열 함수들은 `'\0'`을 만날 때까지 문자를 처리합니다. ```c char str[10] = "Hi"; // 메모리: [H][i][\0][?][?][?][?][?][?][?] // ↑ 여기서 문자열 끝 printf("%s\n", str); // Hi (끝까지만 출력) printf("%zu\n", strlen(str)); // 2 (문자 수, '\0' 제외) ``` > ⚠️ `'\0'`을 빠뜨리면 함수가 문자열 끝을 찾지 못해 메모리를 무작위로 읽습니다. --- ## 문자열 선언 방법 ### 방법 1: char 배열 (수정 가능) ```c char str1[20] = "Hello"; // 크기 20의 배열 char str2[] = "World"; // 크기 자동 결정 (6) str1[0] = 'h'; // ✅ 수정 가능 ``` ### 방법 2: char 포인터 (문자열 리터럴, 수정 불가) ```c char *str3 = "Hello"; // 읽기 전용 영역 가리킴 str3[0] = 'h'; // ❌ 런타임 오류 (읽기 전용) ``` > 입문 단계에서는 **배열 방식을 사용하는 것이 안전**합니다. --- ## 문자열 출력 ```c char name[] = "Alice"; printf("%s\n", name); // Alice printf("안녕, %s!\n", name); // 안녕, Alice! puts(name); // Alice + 자동 줄바꿈 ``` --- ## 문자 하나씩 접근 문자열도 배열이므로 인덱스로 각 문자에 접근할 수 있습니다. ```c char str[] = "Hello"; for (int i = 0; str[i] != '\0'; i++) { printf("[%c]", str[i]); } // 출력: [H][e][l][l][o] ``` --- ## 문자열 길이 ```c #include <string.h> char str[] = "Hello"; printf("%zu\n", strlen(str)); // 5 ('\0' 제외한 문자 수) printf("%zu\n", sizeof(str)); // 6 ('\0' 포함한 전체 크기) ``` --- ## 문자 판별 함수 (`<ctype.h>`) ```c #include <ctype.h> char c = 'A'; printf("%d\n", isupper(c)); // 대문자? 1 printf("%d\n", islower(c)); // 소문자? 0 printf("%d\n", isdigit(c)); // 숫자? 0 printf("%d\n", isalpha(c)); // 알파벳? 1 printf("%c\n", tolower(c)); // 소문자로 변환: a printf("%c\n", toupper('b')); // 대문자로 변환: B ``` --- ## 예제: 문자열 직접 분석 ```c #include <stdio.h> #include <ctype.h> int main() { char str[] = "Hello, World! 123"; int upper = 0, lower = 0, digit = 0, other = 0; for (int i = 0; str[i] != '\0'; i++) { if (isupper(str[i])) upper++; else if (islower(str[i])) lower++; else if (isdigit(str[i])) digit++; else other++; } printf("대문자: %d\n", upper); // 2 printf("소문자: %d\n", lower); // 8 printf("숫자: %d\n", digit); // 3 printf("기타: %d\n", other); // 4 return 0; } ``` ---
// COMMENTS
ON THIS PAGE