본문 바로가기
::public/C,C++ 문자열 관련

strcpy, strncpy(문자열 복사)

by 해맑은욱 2021. 6. 1.

문자열을 복사하는 함수.

 

#include <cstring>        // C++
#include <string.h>       // C
 
char* strcpy(char* dest, const char* origin);
char* strncpy(char* dest, const char* origin, size_t n);
 
 
// (char* dest) : 복사를 당할 문자열.
// (const char* origin) : 복사할 문자열.
// (size_t n) : 복사할 문자열 길이.
// strcpy로 복사할 경우 문자열의 끝을 나타내는 '\0'까지 복사됨.
// strncpy로 복사할 경우 길이 만큼만 복사하기 때문에 문자열의 끝을 나타내는 '\0'를 적절한 위치에 넣어야함.
 
----------
 
int main(void)
{
// strncpy
    char origin[] = "abcdefg1234";    // "abcdefg1234\0" 이므로 size = 12;
    char dest1[20];
    char dest2[10];
    char dest3[] = "strcpy_example";  // size = 15;
 
    //case1 : 빈 배열에 전체를 복사할때
    strcpy(dest1, origin);
 
    //case2 : 꽉 차있는 배열에 전체를 복사할때
    //strcpy(dest2, origin);    // run time error
 
    //case3 : 꽉 차있는 배열에 전체를 복사할때
    strcpy(dest3, origin);
 
    printf("case1 : %s\n", dest1);    // ok
    //printf("case2 : %s\n", dest2);  // run time error
    printf("case3 : %s\n", dest3);    // ok
 
// strncpy
    char origin[] = "abcdefg1234";       // "abcdefg1234\0" 이므로 size = 12;
    char dest1[20];
    char dest2[] = "abcdefghijklmnop";   // size = 17;
    char dest3[] = "strncpy_example";    // size = 16;
    char dest4[10];
 
    // case1 : 빈 배열에 전체를 복사할때
    strncpy(dest1, origin, sizeof(origin));
 
    // case2 : 꽉 차있는 배열에 전체를 복사할때
    strncpy(dest2, origin, sizeof(origin));
 
    // case3 : 꽉 차있는 배열에 일부만 복사할때
    strncpy(dest3, origin, 4);
 
    // case4 : 빈 배열에 일부만 복사할때
    strncpy(dest4, origin, 4);
 
    // case5 : 빈 배열에 일부만 복사하고 '\0' 넣을때
    strncpy(dest4, origin, 4);
    dest4[4= '\0';
 
    printf("case1 : %s\n", dest1);    // "abcdefg1234"
    printf("case2 : %s\n", dest2);    // "abcdefg1234"
    printf("case3 : %s\n", dest3);    // "strnefg1234"
    printf("case4 : %s\n", dest4);    // "strn%%%%%%%%%%%%%..."
    printf("case5 : %s\n", dest4);    // "strn"
 
    return 0;
}
 
cs

'::public > C,C++ 문자열 관련' 카테고리의 다른 글

strtok(문자열 자르기)  (0) 2021.06.02
strcat, strncat(문자열 연결)  (0) 2021.06.01
strchr(문자 검색)  (0) 2021.06.01
strcmp, strncmp(문자열 비교)  (0) 2021.06.01
sscanf => sscanf_s  (0) 2021.06.01