C언어에서 사용하는 문자열은 다양한 함수를 사용해서 변경이 가능합니다.
오늘은 문자열을 다루는 함수에 대해서 알아보겠습니다.
먼저 문자열 함수를 사용하기 위해서는 string.h 헤더를 추가해야 합니다.
문자열 길이 확인 strnlen_s
이전 강좌에서는 자료형 크기를 확인하는 sizeof함수를 사용해서 문자열 길이를 확인했습니다.
sizeof 경우 포인트를 사용한 문자열일 경우 포인트 크기만 확인하게 됩니다.
그래서 정확한 문자열을 확인할 수 없습니다.
반면 strnlen_s는 null문자열을 제외한 크기를 바이트 단위로 확인합니다.
#include <stdio.h>
#include <string.h>
int main(void)
{
char strValue[] = "this is strnlen_s";
int strSize = strnlen_s(strValue, sizeof(strValue));
printf(" %s 문자열 크기는 = %d\n", strValue, strSize);
printf("\n");
return 0;
}
string.h 헤더를 추가하고 strnlen_s를 사용해서 문자열 길이를 확인했습니다.
문자열 사용 시 함수 뒤에 "_s" 함수를 사용하면 보안 취약점을 개선할 수 있습니다.
문자열 크기를 정확하게 확인하기 때문에 중간 변조에 대해서 방어할 수 있습니다.
문자열 복사 strcpy_s
문자열을 복사하기 위해서는 strcpy_s를 사용해서 복사할 수 있습니다.
#include <stdio.h>
#include <string.h>
int main(void)
{
char strCopy1[] = "this is copy";
char strCopy2[] = "strcpy";
strcpy_s(strCopy1, sizeof(strCopy1), strCopy2);
printf(" 복사된 문자열은 \" %s \" 입니다.\n", strCopy1);
printf("\n");
return 0;
}
strCopy1 문자열에 strCopy2 문자열을 복사했습니다.
strcpy_s 함수를 사용해서 두 번째 복사하기 위한 배열 사이즈를 설정합니다.
만약 이 사이즈보다 복사 문자열이 길다면 오류를 출력합니다.
출력 결과 strCopy1 문자열이 "strcpy"로 변경되었습니다.
문자열 연결 함수 strcat_s
문자열은 연결하기 위해서는 strcat_s 함수를 사용합니다.
strcat_s 함수를 사용하기 위해서는 문자열을 연결하기 위한 배열이 합산된 길이보다 커야 합니다.
#include <stdio.h>
#include <string.h>
int main(void)
{
char strCat1[40] = "this is ";
char strCat2[] = " strcat_s";
strcat_s(strCat1, sizeof(strCat1), strCat2);
printf(" 복사된 문자열은 \" %s \" 입니다.\n", strCat1);
printf("\n");
return 0;
}
strCat1 문자열을 길이를 40으로 고정했습니다.
strcat_s를 사용하면 strCat2 문자열이 strCat1 문자열에 포함됩니다.
출력 결과 문자열이 연결된 것을 확인 할 수 있습니다.
strCat1 문자열 길이가 합산된 길이보다 작을 경우 오류를 출력합니다.
문자열 비교 함수 strcmp
문자열을 비교하기 위해서는 strcmp함수를 사용합니다.
strcmp함수는 문자열을 바이트 단위로 비교해서 결과를 리턴합니다.
문자열이 같으면 0을 리턴하고 다르면 0보다 작은 값을 리턴합니다.
#include <stdio.h>
#include <string.h>
int main(void)
{
char strcmp1[] = "strcmp1";
char strcmp2[] = "strcmp2";
char strcmp1copy[] = "strcmp1";
int r1 = strcmp(strcmp1, strcmp2);
int r2 = strcmp(strcmp1, strcmp1copy);
printf(" 첫번째 비교 결과는 = %d 입니다.\n", r1);
printf("\n");
printf(" 두번째 비교 결과는 = %d 입니다.\n", r2);
return 0;
}
3개의 문자열을 사용해서 두번 비교했습니다.
출력 결과 처음 strcmp1, strcmp2 문자열을 비교하면 -1을 리턴합니다.
두 번째 strcmp1, strcmp1copy 문자열일 비교하면 같은 문자열이기 때문에 0을 리턴합니다.
문자열은 다양한 함수를 사용해서 관리할 수 있기 때문에 반드시 공부해주세요.
이상으로 문자열 함수에 대해서 마치겠습니다.
감사합니다.
'IT 나라 > C언어' 카테고리의 다른 글
C언어 프로그래밍 문자열(String) (0) | 2021.02.01 |
---|---|
C언어 프로그래밍 배열 (0) | 2021.01.25 |
C언어 프로그래밍 반복문 (0) | 2021.01.21 |
C언어 프로그래밍 조건문 알아보기 (0) | 2021.01.18 |
C언어 프로그래밍 자료형 알아보기 (0) | 2021.01.16 |