[C언어] 문자열 특징 및 함수 (sizeof, strlen, strcpy, strcat ,strcmp )

 

C언어에서는 문자열을 처리하기 위해 여러가지 함수를 제공하고 <string.h>라이브러리 내에 존재한다.

대표적으로 쓰이는
 - sizeof( 문자열의 byte크기를 알려줌)
 - strlen( 문자열의 글자수를 알려줌)
 - strcpy ( 문자열을 복사해줌 )
 - strcmp (문자열을 비교해서 참,거짓을 알려줌)
 - strcat ( 문자열을 결합해줌 )

4개의 함수에 대해 알아보도록 하겠다.


string.h 라이브러리 사용

#include<stdio.h>
#include<string.h>

사용하기 위해서는 #include<string.h> 를 선언해주어야 한다.


변수 선언

void main()
{
	int cmp;

	char name[] = "Superman";
	char name1[20] = {'S','u','p','e','r'};
	char name2[20];
	name2[0] = 's';
	name2[1] = 'u';
	name2[2] = 'p';
	name2[3] = 'e';
	name2[4] = 'r';
	name2[5] = '\0'
 }

name, name1, name2의 문자열을 각각 다른방식으로 선언, 초기화


sizeof ( 문자열 바이트 수 )

printf("name size = %d\n", sizeof(name)); 
printf("name1 size = %d\n", sizeof(name1)); 

namebyte 크기를 알려줌 name은  Superman 8글자가 들어가 있는것 처럼 보이지만 문자열의 끝은 null이 항상 
들어가 있어서 9byte가나온다. 

name1은 20으로 잡고 초기화를 했기때문에 문자열의 갯수와는 상관없이 20byte가 나온다.


strlen ( 문자열 수 )

printf("name len = %d\n", strlen(name));	
printf("name1 len = %d\n", strlen(name1));

실제 문자열 ( null값 이전) 크기를 알려준다.
name = 8 ( superman)
name1 = 5 ( super ) 


strcpy ( 문자열 복사 )

strcpy(name1, name);
printf("%s\n%s\n\n", name, name1);

name1문자열에 name값을 복사할때는 
name1 = name 이런식으로 선언하면 에러가 난다. ( 주소값을 복사해야한다.)

이렇게 주소값자체를 복사해주는 함수(strcpy)를 사용하는 방법
strcpy(name1, name);  --> name1에 name문자열 복사 ( 뒤가 원본 )

	strcpy(name1, "batman");

변수를 복사하는게 아니고 문자열을 직접 넣을수도 있다.


strcat ( 문자열 결합 )

	strcat(name1, name);
	printf("%s\n%s\n\n", name, name1);

name1 ( batman)에 name(superman)을 결합하여 
name1batmansuperman이 된다. 

*주의점

name1의 배열 사이즈를 초과하여 결합될경우 overflow가 발생한다.


strcmp ( 문자열 비교 )

strcpy(name1, name);	
cmp = strcmp(name1, name);
printf("%d\n\n", cmp); // --> 0
    
strcpy(name1, "batman");
cmp = strcmp(name1, name);
printf("%d\n\n", cmp); // --> 1

문자열을 비교해 참이면 0,  참이 아니면 0이외의 값을 리턴해준다.

 

 

댓글

Designed by JB FACTORY