C言語で文字コピーする方法

C言語では他の言語と異なり文字列の直接代入ではコピーができません。

C言語の文字列はchar型の配列なので、直接代入を行った場合には先頭アドレスのみがコピーされて、実体のコピーは行われません。

この記事では、C言語の正しい文字コピーの方法を紹介します。

文字コピーの方法

C言語で文字コピーを行う場合には、標準関数のstrcpy関数を使用します。

strcpy関数は第一引数にコピー先の変数を、第二引数にコピー元の変数を指定し、戻り値としてコピー先の先頭アドレスを返します。(戻り値は使わなくても良いです)

// コピー元
char s1[] = "hogehoge";
// コピー先
char s2[9];
// 文字コピー
strcpy(s2, s1);

この時に、コピー元の文字列長よりもコピー先の要素数が小さい場合には動作未定義となります。

また、strcpy関数ではコピー元の終端文字までをコピーするため、コピー元文字列に終端文字が存在しない場合にも動作未定義となります。

strcpy関数を自作

strcpy関数の使い方がわかったところで、挙動のさらなる理解を深めるためにstrcpy関数を自作してみます。

先述した通りstrcpy関数はコピー元文字列の先頭から走査して終端文字が見つかるまでをコピー先文字列にコピーします。

  1. コピー元文字列を先頭から走査
  2. 終端文字でなければコピー先文字列にコピー
  3. 終端文字なら終端文字をコピーして終了
// 自作strcpy
char* my_strcpy(char* s1, const char* s2)
{
    // ループ変数
    int i = 0;
    // コピー元文字列を先頭から終端文字が見つかるまで走査
    for(; i < s2[i] != '\0'; i++)
    {
        // コピー先文字列にコピー
        s1[i] = s2[i];
    }
    // 終端文字をコピー
    s1[i] = s2[i];
    return s1;
}

使うときは標準関数のstrcpy関数と同様に第一引数にコピー先変数を、第二引数にコピー元変数を渡します。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です