Young & Rich

 

안녕하세요. 오늘은 C언어 문자열 복사 및 관련 함수를 포스팅해보도록 하겠습니다.

 

들어가기 전에

문자열이란?

- 두 개 이상의 문자가 합쳐진 열. 다른 말로 하면 1byte 이상의 문자들을 문자열이라고 합니다.

"abcd", "대한민국", ...

(한글은 한 글자당 2byte 이므로, 한 글자도 문자열이라고 보셔야 됩니다.)

 

char str; : 문자형 변수에 넣을 수 있으면 '문자'

char str[]; : 문자형 배열에 넣어야하면 "문자열"

 

관련 함수들은 #include<string.h>

string.h 헤더파일에 정의되어 있어 위의 헤더파일을 include 하셔야합니다.

 

문자열 복사함수

strcpy, strncpy

char *strcpy(char *dest, const char *src);

char *strncpy(char *dest, const char *src, size_t size);

 

string copy 의 줄임말입니다.

문자열을 복사할 때 사용합니다.

 

strncpy 는 strcpy 함수에서 +추가적으로 복사하고 싶은 문자열의 길이를 입력받아 copy 하는 함수입니다.

예제를 보시면 이해가 빠릅니다.

 

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

void main()
{
	char src[32] = "Original Text";
	char dest[32] = {0,};
	char dest_n[32] = {0,};

	strcpy(dest, src);
	strncpy(dest_n, src, 5);

	printf("src : %s\n", src);
	printf("dest : %s\n", dest);
	printf("dest_n : %s\n", dest_n);
}

 

실행결과

 

{0,}; 이라고 초기화를 해주지 않으면 이상한 결과가 나올 수 있습니다.

문자열은 출력할 때 '\0' NULL 즉 0의 값을 만날 때까지 출력합니다.

초기화하지 않고 변수를 0으로 초기화해주지 않으면 프로그램이 오동작할 가능성이 높습니다.

 

 

 

문자열 출력함수

sprintf, snprintf

int sprintf(char *dest, const char *format, ...)

int snprintf(char *dest, size_t, size, const char *format, ...)

 

위에서 설명드린 strcpy, strncpy 는 문자열을 그냥 그대로 복사만 할 수 있는 함수입니다.

 

하지만, sprintf, snprintf 는 사용자가 원하는대로 문자열을 변경해서 복사할 수 있습니다.

string printf 라고 생각하시면 됩니다.

 

printf 를 사용할 때, 사용자가 원하는 대로 %d %s %lf 를 사용하여 원하는 글자를 출력을 할 수 있었습니다.

이것과 똑같이 문자열(string)에 printf 를 한다고 생각하시면 이해가 빠릅니다.

 

printf 는 console 창에 출력을 했지만, sprintf 는 문자열에 출력을 한다고 생각하시면 됩니다.

 

예제를 보시죠.

 

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

void main()
{
	char src[32] = "I am";
	char result[32] = {0,};

	sprintf(result, "%s %s", src, "Tory");
	printf("result : %s\n", result);

	snprintf(result, sizeof(result) - 1, "%s %s", src, "Tory Daddy");
	printf("result : %s\n", result);
}

 

이미 print 할 format 을 만들어놓고도 사용가능합니다.

 

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

void main()
{
	char content[32] = "I am %s. My score is %d";
	char result[64] = {0,};

	sprintf(result, content, "Tory", 100);
	printf("result : %s\n", result);
}

실행결과

 

 

 

문자열 연결함수

strcat, strncat

char *strcat(char *dest, const char *src);

char *strncat(char *dest, const char *src, size_t size);

 

string concatenate : concatenate (사슬 같이 잇다)

문자열 두 개를 사슬 같이 잇다. 즉 연결시켜주는 함수입니다.

 

앞서 sprintf 예제를 strcat 을 사용해보겠습니다.

 

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

void main()
{
	char dest[32] = "I am ";
	char src[64] = "Tory";

	strcat(dest, src);
	printf("dest : %s\n", dest);
	strncat(dest, src, 2);
	printf("dest : %s\n", dest);
}

실행결과

"I am " 과 "Tory" 가 합쳐진 문자열을 dest 로 만들고,

다시 "I am Tory" 의 dest 에 "Tory" 에서 2 만큼인 "To" 만 뒤에 붙은 결과를 보실 수 있습니다.

 

strcat 은 두 개의 문자열을 더하여(+) 결과물을 dest 에 입력한다

이렇게 이해하시면 되겠습니다.

 

포스팅은 여기까지 마치겠습니다.

 

그럼 20000.

 

이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band