今回は、ポインタを活用して、文字列をコピーするプログラムをご紹介しよう。
なお、本プログラムは、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個後方の文字を指すように更新される。
![](https://i0.wp.com/my-studies.org/wp-content/uploads/2024/07/01af6c1816f4d5db5db98a1305b1d42b.png?resize=630%2C1024&ssl=1)
sの指す文字がナル文字になるまで、「sの指す文字をdの指す文字に代入し、その直後にdとsをインクリメントして次の文字に着目する」処理を繰り返す。
(参考) 新・明解C言語 入門編 第2版 柴田 望洋 (著)SBクリエイティブ
コメント