[C言語] string.hライブラリのstrcpy関数を自作してみた

C言語
生徒
生徒

strcpyって何ですか?

先生
先生

strcatとは「string(文字列)」を「copy(コピーする)」と言う言葉を省略したものだよ

生徒
生徒

なるほど。文字をコピーしたいときに使う関数なんですね。

先生
先生

そうだね。実際に仕様や使い方を見てみようか。

仕様

#include <string.h>
char *strcpy(char *strDest, const char *strSrc);
概要文字列をコピーする
ヘッダ#include <string.h>
関数概要char *strcpy(char *strDest, const char *strSrc)
戻り値s2の値をs1にコピーし、s1を返す。

使い方

文字列の用意

#include <stdio.h>

int main(void) {
    char s1[] = "Hello ";
    char s2[] = "World";
    printf("%s\n", s1);
    printf("%s\n", s2);

    return 0;
}
Hello 
World

文字列のコピー

次にstring.hライブラリのstrcpy関数を使って文字列をコピーします。

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

int main(void) {
    char str1[] = "Hello";
    char str2[] = "World";

    printf("%s\n", str1);

    strcpy(str1, str2);    // コピー

    printf("%s\n", str1);
}
Hello
World    // コピーできています

自作してみる

それでは、仕様に従って自作してみます。

仕様は以下のような関数になっております。

char *strcpy(char *strDest, const char *strSrc){
}

中身を書いてみましょう

char *strcpy(char *s1, const char *s2) {
    size_t i;
    for (i = 0; *s2 != '\0'; i++) {
        *s1 = *s2;
        s1++;
        s2++;
    }
    *s1 = '\0';

    return s1;
}

図による説明

これで、自作strcpy関数の作成完了です。

最後に、実行してみましょう。

#include <stdio.h>

char *strcpy(char *s1, const char *s2) {
    size_t i;
    for (i = 0; *s2 != '\0'; i++) {
        *s1 = *s2;
        s1++;
        s2++;
    }
    *s1 = '\0';

    return s1;
}

int main(void) {
    char str1[] = "Hello";
    char str2[] = "World";

    printf("%s\n", str1);
    strcpy(str1, str2);

    printf("%s\n", str1);
}
Hello
World

コメント

タイトルとURLをコピーしました