null
vuild_
Nodes
Flows
Hubs
Login
MENU
Notifications
Login
☆ Star
문자열 함수
#c
#c-lang
#beginner
#strings
#string-functions
@devpc
|
2026-03-29 05:33:45
|
GET /api/v1/nodes/39?nv=2
History:
v2 (2026-03-29) (Latest)
v1 (2026-03-29)
0
Views
0
Calls
# 문자열 함수 ## `<string.h>` 라이브러리 C 표준 라이브러리는 문자열을 다루는 다양한 함수를 제공합니다. ```c #include <string.h> ``` --- ## 주요 함수 목록 | 함수 | 기능 | |------|------| | `strlen(s)` | 문자열 길이 반환 | | `strcpy(dst, src)` | 문자열 복사 | | `strncpy(dst, src, n)` | n개 문자 복사 (안전) | | `strcat(dst, src)` | 문자열 이어붙이기 | | `strncat(dst, src, n)` | n개 문자 이어붙이기 (안전) | | `strcmp(s1, s2)` | 문자열 비교 | | `strncmp(s1, s2, n)` | n개 문자 비교 | | `strchr(s, c)` | 문자 검색 | | `strstr(s, sub)` | 부분 문자열 검색 | | `sprintf(buf, fmt, ...)` | 문자열로 포맷 출력 | --- ## strlen — 문자열 길이 ```c char str[] = "Hello"; printf("%zu\n", strlen(str)); // 5 ('\0' 제외) ``` --- ## strcpy — 문자열 복사 문자열은 `=`로 복사할 수 없습니다. 반드시 `strcpy`를 사용합니다. ```c char src[] = "Hello"; char dst[20]; // ❌ 잘못된 복사 // dst = src; // 컴파일 에러 // ✅ 올바른 복사 strcpy(dst, src); printf("%s\n", dst); // Hello ``` > ⚠️ `dst` 크기가 `src`보다 작으면 버퍼 오버플로우 발생! > 안전한 버전: `strncpy(dst, src, sizeof(dst) - 1);` ```c char src[] = "Very long string here..."; char dst[10]; strncpy(dst, src, sizeof(dst) - 1); dst[sizeof(dst) - 1] = '\0'; // 반드시 NULL 종단 추가 ``` --- ## strcat — 문자열 이어붙이기 ```c char result[30] = "Hello"; strcat(result, ", "); strcat(result, "World!"); printf("%s\n", result); // Hello, World! ``` > ⚠️ `result` 배열 크기가 충분해야 합니다. > 안전한 버전: `strncat(dst, src, n);` --- ## strcmp — 문자열 비교 `==`로 문자열을 비교할 수 없습니다. `strcmp`를 사용합니다. ```c char a[] = "apple"; char b[] = "banana"; char c[] = "apple"; // ❌ 잘못된 비교 // if (a == c) ... // 주소 비교 (항상 다름) // ✅ 올바른 비교 printf("%d\n", strcmp(a, c)); // 0 (같음) printf("%d\n", strcmp(a, b)); // <0 (a < b, 사전순) printf("%d\n", strcmp(b, a)); // >0 (b > a) ``` 반환값 정리: - `0`: 두 문자열이 같음 - `< 0`: s1이 s2보다 사전순으로 앞 - `> 0`: s1이 s2보다 사전순으로 뒤 ```c if (strcmp(input, "quit") == 0) { printf("종료합니다.\n"); } ``` --- ## strchr — 문자 검색 문자열에서 특정 문자의 첫 번째 위치를 반환합니다. ```c char str[] = "Hello, World!"; char *pos = strchr(str, 'o'); if (pos != NULL) { printf("찾은 위치: %ld\n", pos - str); // 4 printf("이후 문자열: %s\n", pos); // o, World! } ``` --- ## strstr — 부분 문자열 검색 ```c char str[] = "Hello, World!"; char *found = strstr(str, "World"); if (found != NULL) { printf("발견: %s\n", found); // World! } ``` --- ## sprintf — 문자열로 포맷 출력 `printf`와 동일하지만, **화면 대신 문자열 버퍼에 저장**합니다. ```c char buf[100]; int score = 95; char name[] = "Alice"; sprintf(buf, "%s의 점수: %d점", name, score); printf("%s\n", buf); // Alice의 점수: 95점 ``` 숫자를 문자열로 변환할 때도 유용합니다: ```c char num_str[20]; sprintf(num_str, "%d", 12345); printf("문자열: %s\n", num_str); // 문자열: 12345 ``` --- ## 예제: 문자열 처리 종합 ```c #include <stdio.h> #include <string.h> int main() { char first[20] = "Hong"; char last[20] = "Gildong"; char full[50]; // 성명 조합 strcpy(full, last); strcat(full, " "); strcat(full, first); printf("Full name: %s\n", full); // Gildong Hong // 길이 확인 printf("길이: %zu\n", strlen(full)); // 12 // 비교 char input[50]; printf("이름 입력: "); scanf("%s", input); if (strcmp(input, full) == 0) { printf("이름이 일치합니다.\n"); } else { printf("이름이 다릅니다.\n"); } // 검색 if (strstr(full, "Hong") != NULL) { printf("'Hong'이 포함되어 있습니다.\n"); } return 0; } ``` --- ## 안전한 문자열 함수 정리 | 위험한 함수 | 안전한 대안 | |------------|------------| | `strcpy(dst, src)` | `strncpy(dst, src, n)` + 수동 NULL 추가 | | `strcat(dst, src)` | `strncat(dst, src, n)` | | `gets(s)` | `fgets(s, n, stdin)` | | `sprintf(buf, ...)` | `snprintf(buf, n, ...)` | ---
// COMMENTS
ON THIS PAGE