언어 자료구조 알고리즘/디딤돌 C언어

[C언어] 72. 문자열 복사

언제나휴일 2016. 4. 17. 16:15
반응형



문자열 복사


C언어에서 문자열을 char 형식을 원소로 하는 배열이나 포인터를 사용하죠.
특히 문자열을 변경하는 작업을 하려면 배열을 사용한다고 했어요.  
그런데 C언어에서 배열 이름은 포인터 상수로 취급하여 대입 연산 좌항에 없어요.


왼쪽 피연산자는 l-value이어야 합니다.

 

 

C 언어에서 문자열 데이터를 복사할 때는 다음 함수를 사용할 있어요.
char *strcpy(char *dest, const char *src);
char *strcpy(char *dest, size_t size, const char *src);
char *strncpy(char *dest, const char *src, size_t n);
char *strncpy(char *dest, size_t size, const char *src, size_t n);
 
입력 인자는 문자열을 복사할 주소와 원본 문자열을 받아요.
문자열을 복사하기 위해서 번째 인자는 const 키워드가 없어요.
반환 형식은 char * 번째 인자 그대로 반환한답니다.
printf(“%s\n”, strcpy(name,”hello”));
처럼 연쇄 작업을 있게 반환는 것으로 다른 특별한 의미는 없어요.  

그리고 strcpy 함수와 strncpy 함수는 src 가리키는 문자열의 길이나 복사할 길이 n dest 버퍼 크기보다 크면 버퍼 오버플로우 버그가 발생할 있어요.
strcpy_s
strncpy_s dest 버퍼의 크기를 번째 입력 인자로 받아요.
dest
버퍼 크기를 받아 내부에서 버퍼 오버플로우 버그가 발생하지 않게 개선한 함수예요.  
 
문자열 복사
#include <stdio.h>
#include <string.h>
#define MAX_NAME_LEN      50
int main()
{
   
char name1[MAX_NAME_LEN+1] = "hello";
   
char name2[MAX_NAME_LEN+1] = "";
   
char name3[MAX_NAME_LEN+1] = "";
 
    strcpy_s(name2,sizeof(name2),name1);
    printf(
"%s\n",name2);
    strncpy(name3,sizeof(name3),name1,3);
    printf(
"%s\n",name3);
   
return 0;
}

실행 결과
hello
hel
 
strncpy
함수를 사용하면 복사한 문자 뒤에 널문자를 대입해 주지 않아요.
이러한 이유로 초기화하지 않고 사용하면 쓰레기 값이 남아있을 있으므로 주의하세요.
 
외에도 문자열을 사용하기 위한 다양한 함수들을 제공하고 있어요.

C언어 표준 라이브러리 함수 참고하세요.

[C 언어 표준 라이브러리 함수 가이드] C언어 표준 라이브러리 함수에 관한 사용법을 다루고 있습니다

반응형