人工知性を作りたい

私が日々、挑戦したことや学んだことなどを紹介していく雑記ブログです。 (新しいAI技術HTM, 専門の音声信号処理, 趣味のアニメ等も書いてます。)

【C言語】文字列操作 「文字列のコピー」

f:id:hiro-htm877:20190601191549p:plain

 

f:id:hiro-htm877:20190601202549p:plain

 プログラミング初心者、学生

C言語ではめんどくさい文字列の操作

・よく使う文字列のコピーの仕方が知りたい

 

そんな方の疑問に答えます。

 

コードが知りたい方は目次のソースコードへ飛んでください!

本記事のテーマ

【完全初心者向け】文字列のコピーが分かる!

<stdlib.h>のstrcpyでもコピーは出来ますが今回は自分たちで文字列をコピーする関数を作成します! 

文字列のコピー

アルゴリズム

文字列のコピー

1. コピー元、コピー先の配列を宣言

2. 配列のアドレスを関数に渡し、関数内ではポインタで扱う

3. コピー元の値がNULL文字になるまでコピーを続ける

また、

・コピー先の配列はとコピー元より大きくなくてはならない

・文字列の最後には終端文字としてNULL文字が入っている

 

 以上のアルゴリズムを元にC言語プログラミングを組んでいきます!

文字列コピー、実装!

コピー方法は、 

1.  while(*src_p != NULL)

 ←src_pの終端文字がNULLになるまで実行 

2. *dist_p = *src_p

 ←アドレス内の値をコピー

3. dist_p++; src_p++;

 ←コピー元、コピー先のアドレス移動

文字列操作コード

文字列にはアドレス一つにつき一文字が格納されており、終端にはNULL文字が入っています。ですので、アドレスを一つずつ進め、中の値をコピーしていきます・

ポインタの扱い方:

*src_p: *をつけるとポインタの中の値を操作できる

src_p++: ポインタのアドレスを一つ進める

while(*src_p != NULL){
        *dist_p = *src_p;
        dist_p++;
        src_p++;
        count++;
    }
出力 

コピー前: 

コピー後: Hello World!

完成です!

文字列のコピーは色んなとこで使用すると思います、ぜひ試してみてください!

main文を含む全ソースコードは以下に示します。 

ソースコード

#include <stdio.h>
void enshu0606(void);
unsigned char mystrcpy(char* dist_p, char* src_p);

int main() {
    enshu0606();
    return 0;
}

unsigned char mystrcpy(char* dist_p, char* src_p){
    unsigned char count = 0;
    while(*src_p != NULL){
        *dist_p = *src_p;
        dist_p++;
        src_p++;
        count++;
    }
    return count;
}

void enshu0606(){
    char src[200] = {"Hello World!"};
    char dist[200];
    printf("コピー前: %s\n", dist);
    mystrcpy(dist, src);
    printf("コピー後: %s\n", dist);
}