C 언어 - 문자열 처리 함수(strlen, strcat, strcpy, strcmp)

컴퓨터/C

728x90
반응형

문자열을 처리하는 함수들 

C언어에서는 문자열을 처리하기 위해서 기본적인 함수들을 제공하고 있습니다. 문자열을 처리를 하기 위해서는 C언어의 특성상 불편한 점이 많이 때문입니다.  C언어에서는 이런 문자열을 처리하기 위한 String 라이브러리를 제공합니다. 

이렇게 제공되는 함수들을 알아보고 사용법을 알아보도록 하겠습니다.

 

String 라이브러리를 사용하기 위해서는 꼭 헤더파일인 String.h를 넣어주어야 합니다.

 

strlen() 함수

C언어에서 strlen 함수는 String length를 의미합니다 즉, 문자열의 길이를 확인할 수 있는 함수입니다.

함수의 원형은 아래와 같습니다.

#include <string.h>
size_t strlen(const char* s);
//// strlen(문자열주소)  --> 문자열의 길이 반환 /////
#include<stdio.h>
#include<string.h>
int main()
{
	char str1[] = "Hello World";
	char str2[50] = "Hello World";

	//함수로 문자열의 길이 구하기
	int str1_length = strlen(str1);
	printf("str1의 문자열 길이 : %d\n", str1_length);
	printf("str2의 문자열 길이 : %d\n", strlen(str2));
	//함수로 문자열 변수의 크기 구하기
	printf("str1 문자열 변수의 크기 : %d\n", sizeof(str1));
	printf("str2 문자열 변수의 크기 : %d\n", sizeof(str2));
	return 0;
}

  • 위 예제를 보시면 strlen함수의 특징을 확실하게 알수 있습니다.
  • strlen함수는 문자열의 길이를 정수의 값으로 반환 합니다. 
  • 문자열을 저장할때는 끝을 알리기 위해 null문자('\0')가 포함되어 저장되지만, strlen은 null문자를 포함하지 않은 순수한 문자의 길이 값만을 반환합니다.

strcat() / strncat() 함수

위의 두 함수는 서로 다른 문자열을 합치는 경우 사용합니다. 

두 함수 모두 문자를 합치기 위해 동일하게 사용되나 strncat함수는 합치는 문자열의 길이를 제한합니다. 

함수의 원형은 아래와 같습니다.

#include<sting.h>
char* strcat(char* restrict s1, const char* restrict s2);
///// strcat(이어붙일 위치 문자열주소,이어붙일 대상 문자열주소) ///// 
char* strncat(char* restrict s1, const char* restrict s2, size_t n);
///// strcat(이어붙일 위치 문자열주소,이어붙일 대상 문자열주소 , 이어붙일 문자열의 크기 제한) ///// 
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
	char str1[15] = "hello";
	char str2[20] = " world";

	printf("%s\n", strcat(str1, str2)); 

	char str3[9] = "hello";
	char str4[20] = " world";
	printf("%s\n", strncat(str3, str4,(sizeof(str3) - strlen(str4)))); // 붙여 넣을 크기를 제한

	return 0;
}
  • 예제와 같이 문자열을 합치기 위한 공간이 만약 적다면 오버플로우 현상이 발생하며 프로그램에 문제가 발생할 수 있습니다. 따라서 strncat을 사용하여 복사하는 범위를 제한할 수 있습니다.

strcpy() / strncpy() 함수

이 함수들은 문자열을 복사하는 함수입니다.

원형은 다음과 같습니다.

#include<string.h>
char *strcpy(char* restrict s1,const char* restrict s2);
char *strcpy(char* restrict s1,const char* restrict s2,size_t n);
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
	char str1[15] = "hello";
	char str2[20] = "";
	strcpy(str2, str1);
	printf("%s\n", str2); 

	char str3[9] = "hello";
	char str4[3] = "";

	strncpy(str4, str3, sizeof(str4)-1);
	printf("%s\n", str4); // 붙여 넣을 크기를 제한

	return 0;
}
  • 주의사항은 문자열 배열을 복사하기 위해서도 null문자를 고려해야 됩니다.

strcmp() / strncmp() 함수

이 함수들은 문자열의 내용을 비교하는 함수입니다. 

함수의 원형은 다음과 같습니다.

#include <string.h>
int strcmp(const char*s1,const char* s2);
int strcmp(const char*s1,const char* s2,size_t n);
//// 완전히 같으면 0을 반환
//// 첫번째 매개변수의 문자열이 길면 양수 반환
//// 두번째 매개변수의 문자열이 길면 음수 반환
#include<stdio.h>
#include<string.h>
int main()
{
	char str[10] = "hello";

	int check = strcmp(str, "hello");
	printf("%d\n", check);
	
	int check2 = strcmp(str, "hell");
	printf("%d\n", check2);

	int check3 = strcmp(str, "world!!!");
	printf("%d\n", check3);

	return 0;
}

 

요약해보기

  • 문자열의 길이 함수 - strlen
  • 문자열의 합치기 - strcat
  • 문자열의 복사하기 - strcpy
  • 문자열을 비교하기 - strcmp
728x90
반응형

'컴퓨터 > C' 카테고리의 다른 글

C 언어 - 쓰래기값과 초기화  (0) 2021.06.30
C 언어 - 열거체(enum)  (0) 2021.06.30
C 언어 - sizeof 함수  (0) 2021.06.29
C 언어 - 함수의 원형 선언  (0) 2021.06.29
C 언어 - 소스파일 나누기  (0) 2021.06.28

Commnet

G91개발일지

Gon91(지구일)

91년생 공학엔지니어의 개발일지

TODAY :

YESTER DAY :

TOTAL :