C言語のきほん「ポインタの基本(17)ポインタによる文字列の操作(2)文字列のコピー」

スポンサーリンク
C言語

今回は、ポインタを活用して、文字列をコピーするプログラムをご紹介しよう。

なお、本プログラムは、Windows 11 Home(23H2)上で、 Visual Studio Code(1.90.2)を使用して作成し、gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0でコンパイルしている。

//文字列をコピーするプログラム

#include <stdio.h>

//文字列sをdにコピーする
char *str_copy(char *d,const char *s)
{
    char *t = d;

    while (*d++ = *s++)
        ;
    return t;
}

int main(void)
{
    char str[128] = "ABC";
    char tmp[128];

    printf("str = \"%s\"\n",str);

    printf("コピーするのは:");
    scanf("%s",tmp);

    str_copy(str,tmp);

    printf("str = \"%s\"\n",str);

    return 0;
}

実行結果

str = "ABC"
コピーするのは:WXYZ
str = "WXYZ"

while文の制御式*d++、*s++の働き

(1)*d = *s の代入
代入式*d = *sの評価・実行で、ポインタsの指す文字が、ポインタdの指す文字へと代入される。

(2)d++とs++
代入が完了した直後にdとsがインクリメントされる。
結果、ポインタdとsは、いずれも1個後方の文字を指すように更新される。

sの指す文字がナル文字になるまで、「sの指す文字をdの指す文字に代入し、その直後にdとsをインクリメントして次の文字に着目する」処理を繰り返す。

参考) 新・明解C言語 入門編 第2版 柴田 望洋 (著)SBクリエイティブ

コメント

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