[C언어] 문자열을 복사

in #kr-dev5 years ago (edited)

[C언어] 문자열을 복사


C언어 문자열 함수들을 다루다 보니 재미가 붙었네요. 오늘은 string.h 헤더파일에서 제공되는 strcpy()함수를 이용하여 문자열 복사를 테스트 해보고 이 함수를 직접 구현해보는 시간으로 간단히 post를 작성합니다.

1. 문자열을 복사


#include <string.h>
 
strcpy(str1, str2); //str2 문자열을 str1에 복사

str2에 저장된 문자열을 str1 변수에 복사합니다.

만약 로직인 한라인으로 같은 곳이면 두 변수에서 주소지를 일치시켜먼 간단히 해결 할 수 있습니다.

*str1, *str2 변수로 나누었을 때 아래 문장으로 str2의 주소값이 str1에 저장됩니다.

str1=str2

이렇게 str2의 주소지를 str1에 들어 있기 때문에 str2에 들어 있는 문자열을 str1에서도 쉽게 접근할 수 있게 됩니다. 같은 주소지에 문자열이 저장되어 있기 때문입니다.

그런데 실제로는 주소지를 공유하면 한쪽 주소지에서 수정에 의한 변경이 이루어지면 다른 변수도 달라지게 됩니다. 이게 안은 지역 내 코딩이라면 상관 없는데 사용자 정의 함수와 같은 외부에서 선언 되었을 때에는 문제를 야기 할 수 있습니다. 그래서 외부로 혹시 표현 될 때에는 별도 저장이 필요 합니다.

아무튼 string.h 파일에서 제공되는 이 함수가 제대로 동작하는 지 테스트 해봅시다.

[코딩]

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

int main(int argc, char *argv[]) {
        
    char str1[10];
    
    strcpy(str1,"aBcDeF");
        printf("strcpy() => %s\n", str1);


    return 0;
}

[결과]
a1.jpg

str1에 복사 된 문자열이 정상적으로 잘 출력 되었네요.
그러면 C언어 입문자라면 이 함수를 직접 코딩하여 구현 해봐야겠죠.

2. strcpy()함수 구현


void strcpySub(char *str1, char *str2){
    int i=0;
    while(str2[i]){
        str1[i]=str2[i];
        i++;
    }
    str1[i]='\0';
}

지난시간에 배운 문자열을 순차적으로 알파벳 하나씩 읽어오도록 하는 while()문을 배웠었는데 이 로직을 이용하여 문자열을 str1에 복사를하는 동작은 위 코딩과 같습니다.
while()문으로 알파벳을 str2에서 str1에 복사됩니다.여기서, 중요한것은 마지막에 '\0' 표현을 하지 않으면 str1에 뒷부분에 쓰래기 값이 출력 되기 때문에 문자열의 끝을 나타내는 '\0'을 저장하여 문자열의 끝부분을 나타내 줘야 합니다.

3. 코딩


오늘 코딩한 내용을 전체 소스로 만들어서 테스트를 해봅시다.

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

int main(int argc, char *argv[]) {
        
    char str1[10];
    char str2[10];
    
    strcpy(str1,"aBcDeF");
    printf("strcpy() => %s\n", str1);

    strcpySub(str2,"aBcDeF");
    printf("strcpySub() => %s\n", str2);

    return 0;
}

void strcpySub(char *str1, char *str2){
    int i=0;
    while(str2[i]){
        str1[i]=str2[i];
        i++;
    }
    str1[i]='\0';
    
}

[결과]
a2.jpg

마무리


오늘은 간단히 문자열 복사함수를 써보고 나서 복사함수의 동작을 이해하고 직접 함수를 만들어 보는 시간으로 psot를 만들어 봤네요.
간단한 내용이라 따로 추가하지 않겠습니다.


Sponsored ( Powered by dclick )

dclick-imagead

Sort:  

짱짱맨 호출에 응답하였습니다.

방문해주셔서 감사해요.

코딩은 언제 봐도 어렵습니다..ㅜ.ㅜ

처음보시는 분들은 외계어처럼 느껴지지요.
저도 언어를 처음 배울 때 외계어처럼 느껴졌지요.

Coin Marketplace

STEEM 0.15
TRX 0.12
JST 0.026
BTC 56095.11
ETH 2533.38
USDT 1.00
SBD 2.23