안녕하세요. 오늘은 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.
C# HTTP Server, Digest HTTP Web Server, Griffin.WebServer (0) | 2020.09.17 |
---|---|
C# Nuget ZMQ, ZMQ Recv (0) | 2020.09.01 |
C언어 memset, memcpy 메모리(데이터) 초기화 및 복사 (4) | 2020.04.09 |
11강 C언어 동적할당, malloc, free (0) | 2020.04.07 |
10강 C언어 파일 입출력, C언어 FILE (0) | 2020.02.03 |