문자열 처리 함수
✒️ 2025-05-15 15:55 내용 수정
수제비 2024 정보처리기사 필기 5판 1권의 내용을 정리
TCPSchool의 내용을 정리
1. strlen()
- 인수로 전달된 문자열의 길이를 반환한다.
#include <string.h>
size_t strlen(const char *s);
#include <stdio.h>
#include <string.h>
int main(void)
{
char str[] = "apple banana";
printf("str 배열 길이 : %d\n", strlen(str));
}
str 배열 길이 : 12
2. strcat()과 strncat()
strcat()은 하나의 문자열에 다른 문자열을 연결해준다.- 첫 번째 인수 : 기준 문자열
- 두 번째 인수 : 연결할 문자열
- 두 번째 인수로 전달된 문자열의 복사본을 기준 문자열 뒤에 추가한다.
- 기준 문자열이 저장된 배열의 공간이 충분하지 않으면 문자열을 연결할 때 오버플로우가 발생할 수 있다.
#include <string.h>
char *strcat(char * restrict s1, const char * restrict s2);
strncat()은 하나의 문자열에 다른 문자열을 연결해준다.- 첫 번째 인수 : 기준 문자열
- 두 번째 인수 : 연결할 문자열
- 세 번째 인수 : 추가할 문자열의 최대 길이
#include <string.h>
char *strncat(char * restrict s1, const char * restrict s2, size_t n);
#include <stdio.h>
#include <string.h>
int main(void)
{
char strc[6] = "hello";
char strcc[] = "world from C!";
// strcat(strc, strcc); 는 오버플로우 발생
strncat(strc, strcc, 5);
puts(strc);
}
helloworld
3. strcpy()와 strncpy()
strcpy()는 문자열을 복사한다.- 첫 번째 인수로 전달된 배열에 두 번째 인수로 전달된 문자열을 복사한다.
strcat()과 마찬가지로 첫 번째 인수로 전달된 배열의 크기가 복사할 문자열의 길이보다 작으면 배열 오버플로우가 발생한다.
#include <string.h>
char *strcpy(char * restrict s1, const char * restrict s2);
strncpy()는 문자열을 복사한다.- 첫 번째 인수로 전달된 배열에 두 번째 인수로 전달된 문자열을 복사하고, 세 번째 인수로 복사할 문자열의 최대 길이를 지정한다.
strcat()과 마찬가지로 첫 번째 인수로 전달된 배열의 크기가 복사할 문자열의 길이보다 작으면 배열 오버플로우가 발생한다.
#include <string.h>
char *strcpy(char * restrict s1, const char * restrict s2, size_t n);
#include <stdio.h>
#include <string.h>
int main(void)
{
char strcp[20] = "Pizza Chicken";
char strcpp[6];
// strcpp에 strcp를 배열 크기만큼 복사
strncpy(strcpp, strcp, sizeof(strcpp)-1);
// strcpp에 널 문자 삽입
strcpp[sizeof(strcpp)-1] = '\0';
puts(strcpp);
}
Pizza
4. strcmp()와 strncmp()
strcmp()는 문자열의 내용을 비교한다.- 전달 받은 포인터들이 가리키는 문자열의 내용을 서로 비교한다.
- 문자열의 모든 문자는 ASCII 코드값으로 변환되어 문자열의 맨 앞에서부터 순서대로 비교한다.
#include <string.h>
int strcmp(const char * s1, const char * s2);
| 반환값 | 설명 |
|---|---|
| 양수 | s1 > s2 |
| 0 | s1 = s2 |
| 음수 | s1 < s2 |
strncmp()는 문자열의 내용을 비교한다.- 전달 받은 포인터들이 가리키는 문자열의 내용을 서로 비교한다.
- 세 번째 인수로 비교할 문자의 개수를 지정할 수 있다.
#include <string.h>
int strcmp(const char * s1, const char * s2, size_t n);
#include <stdio.h>
#include <string.h>
int main(void)
{
char str1[] = "abc";
char str2[] = "abc";
char str3[] = "ABC";
char str4[] = "abcABC";
printf("str1 == str2 ? : %d\n", strcmp(str1, str2));
printf("str1 == str3 ? : %d\n", strcmp(str1, str3));
printf("str2 == str3 ? : %d\n", strcmp(str2, str3));
printf("str1 == str4 ? : %d\n", strcmp(str1, str4));
printf("str1 == str4 (first 3 letters) ? : %d\n", strncmp(str1, str4, 3));
return 0;
}
str1 == str2 ? : 0
str1 == str3 ? : 1
str2 == str3 ? : 1
str1 == str4 ? : -1
str1 == str4 (first 3 letters) ? : 0
5. 문자열의 숫자 변환
atoi(),atol(),atoll(),atof()함수는 문자열을 해당 타입의 숫자로 변환한다.
#include <stdlib.h>
int atoi(const char *str); // int로 변환
int atol(const char *str); // long으로 변환
int atoll(const char *str); // long lnog으로 변환
int atof(const char *str); // double로 변환
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
printf("10 문자열 변환 : %d\n", atoi("10"));
printf("100000000000000 문자열 변환 : %lld\n", atoll("100000000000000"));
printf("3.14 문자열 변환 : %.2f\n", atof("3.14"));
return 0;
}
10 문자열 변환 : 10
100000000000000 문자열 변환 : 100000000000000
3.14 문자열 변환 : 3.14
6. 대소문자 변환
toupper()는 문자열을 모두 대문자로,tolower()는 모두 소문자로 변환한다.
#include <ctype.h>
int toupper(int c);
int tolower(int c);
#include <ctype.h>
#include <stdio.h>
#include <string.h>
int main(void)
{
char str[] = "Hello World";
int str_len = strlen(str);
char str_up[str_len+1];
char str_low[str_len+1];
puts(str);
for (int i = 0; i < str_len; i++) {
str_up[i] = toupper(str[i]);
str_low[i] = tolower(str[i]);
}
str_up[str_len] = '\0';
str_low[str_len] = '\0';
puts(str_up);
puts(str_low);
return 0;
}
Hello World
HELLO WORLD
hello world