728x90
주요 문자열 관련 함수들을 예시와 함께 쉽게 정리해 보겠습니다.
1. 문자열 길이 측정: strlen
- 기능
문자열의 길이를 반환합니다. (널 문자는 계산하지 않습니다.) - 사용 예:설명: "Hello, world!"는 13개의 문자를 포함하므로 출력은 13이 됩니다.
#include <stdio.h> #include <string.h>
int main(void) { char str[] = "Hello, world!";
size_t len = strlen(str); printf("문자열 길이: %zu\n", len); return 0; }
2. 문자열 복사: strcpy와 strncpy
a. strcpy
- 기능
원본 문자열(source)을 목적지 문자열(destination)로 복사합니다. 널 문자까지 복사하므로, 목적지 배열은 충분한 크기를 가져야 합니다.
- 사용 예
#include <stdio.h> #include <string.h>
int main(void) { char src[] = "Original";
char dest[20]; // 충분한 크기 확보 strcpy(dest, src);
printf("복사된 문자열: %s\n", dest); return 0; }
b. strncpy
- 기능
최대 n개 문자만 복사합니다. 단, 원본 문자열의 길이가 n보다 크면 널 문자를 자동으로 추가하지 않을 수 있으므로 주의해야 합니다. - 사용 예
#include <stdio.h> #include <string.h>
int main(void) { char src[] = "Very long string";
char dest[10]; strncpy(dest, src, sizeof(dest) - 1); dest[sizeof(dest) - 1] = '\0';
// 널 종료 추가 printf("복사된 문자열: %s\n", dest); return 0; }
3. 문자열 연결: strcat와 strncat
a. strcat
- 기능
한 문자열의 끝에 다른 문자열을 덧붙입니다.
주의: 목적지 배열은 연결 후에도 널 종료 및 전체 문자열을 수용할 만큼 크기가 커야 합니다. - 사용 예
#include <stdio.h> #include <string.h>
int main(void) { char dest[30] = "Hello"; char src[] = ", world!";
strcat(dest, src); printf("연결된 문자열: %s\n", dest); return 0; }
b. strncat
- 기능
최대 n개의 문자만 연결합니다. - 사용 예
#include <stdio.h> #include <string.h>
int main(void) { char dest[30] = "Hello"; char src[] = ", world!";
strncat(dest, src, 4); // src의 앞 4문자만 연결
printf("부분 연결된 문자열: %s\n", dest); return 0; }
4. 문자열 비교: strcmp와 strncmp
a. strcmp
- 기능:
두 문자열을 사전식으로 비교합니다.
반환값:- 0 : 두 문자열이 동일
- 음수 : 첫 번째 문자열이 사전 순으로 작음
- 양수 : 첫 번째 문자열이 사전 순으로 큼
- 사용 예
#include <stdio.h> #include <string.h>
int main(void) { char str1[] = "apple";
char str2[] = "banana"; int result = strcmp(str1, str2);
if (result == 0) printf("두 문자열은 같습니다.\n");
else if (result < 0) printf("'%s' 가 '%s'보다 작습니다.\n",
str1, str2); else printf("'%s' 가 '%s'보다 큽니다.\n", str1, str2); return 0; }
b. strncmp
- 기능:
최대 n글자까지만 비교합니다. - 사용 예
#include <stdio.h> #include <string.h>
int main(void) { char str1[] = "abcdef"; char str2[] = "abcxyz";
int result = strncmp(str1, str2, 3); // 앞 3글자만 비교
if (result == 0) printf("앞 3글자는 같습니다.\n");
else printf("앞 3글자가 다릅니다.\n"); return 0; }
5. 특정 문자 또는 문자열 탐색: strchr, strrchr, strstr
a. strchr
- 기능
문자열에서 처음 나타나는 특정 문자의 포인터를 반환합니다. - 사용 예
#include <stdio.h> #include <string.h>
int main(void) { char str[] = "Hello, world!";
char *p = strchr(str, 'w'); if (p != NULL) { printf("문자 'w'의 위치: %ld\n", p - str); }
else { printf("문자 'w'를 찾지 못했습니다.\n"); } return 0; }
b. strrchr
- 기능
문자열에서 마지막으로 나타나는 특정 문자의 포인터를 반환합니다. - 사용 예
#include <stdio.h> #include <string.h>
int main(void) { char str[] = "Hello, world!"; char *p = strrchr(str, 'l');
if (p != NULL) { printf("문자 'l'의 마지막 위치: %ld\n", p - str); } return 0; }
c. strstr
- 기능:
문자열 내에서 특정 부분 문자열(substring)이 처음 나타나는 위치의 포인터를 반환합니다. - 사용 예
#include <stdio.h> #include <string.h>
int main(void) { char str[] = "Hello, world!";
char *p = strstr(str, "world"); if (p != NULL)
{ printf("문자열 'world'가 시작되는 위치: %ld\n", p - str); }
else { printf("문자열 'world'를 찾지 못했습니다.\n"); } return 0; }
6. 문자열 포맷: sprintf와 sscanf
a. sprintf
- 기능:
포맷 지정자를 사용하여 문자열을 포맷한 후, 그 결과를 문자열 버퍼에 저장합니다. - 사용 예
#include <stdio.h>
int main(void) { char buffer[50]; int num = 10;
sprintf(buffer, "숫자는 %d입니다.", num); printf("%s\n", buffer); return 0; }
b. sscanf
- 기능:
문자열에서 포맷 지정자에 따라 데이터를 읽어 변수에 저장합니다. - 사용 예
#include <stdio.h>
int main(void) { char str[] = "100 200"; int num1, num2;
sscanf(str, "%d %d", &num1, &num2);
printf("num1 = %d, num2 = %d\n", num1, num2); return 0; }
요약
- 문자열 길이: strlen
- 문자열 복사: strcpy, strncpy
- 문자열 연결: strcat, strncat
- 문자열 비교: strcmp, strncmp
- 문자 및 부분 문자열 탐색: strchr, strrchr, strstr
- 문자열 포맷 입출력: sprintf, sscanf
이와 같이 C 언어의 문자열 관련 함수들은 다양한 문자열 조작 기능을 제공합니다. 각 함수는 기능에 따라 적절히 선택하여 사용하면 되며, 특히 배열 크기나 널 종료문자('\0')에 주의하면서 사용하는 것이 중요합니다.
728x90