質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
char

charは文字データ型を指します。一文字分の文字コードの格納を想定としている型です。

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

ポインタ

ポインタはアドレスを用いてメモリに格納された値を"参照する"変数です。

Q&A

解決済

2回答

417閲覧

strcpyの実現例 返却値

kelt22

総合スコア46

char

charは文字データ型を指します。一文字分の文字コードの格納を想定としている型です。

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

ポインタ

ポインタはアドレスを用いてメモリに格納された値を"参照する"変数です。

0グッド

0クリップ

投稿2020/05/06 07:53

質問

下記のようなstrcpyの実現例をみて、charのポインタ型のpを用意しなくてもいいのでは?と考えpを省いてコードをかいてみたのですが、返却値がおかしくなりました。
返却値がおかしくなることについて解説してくださると嬉しいです。

該当のソースコード

c

1char *strcpy2(char *s1,const char *s2){ 2 char *p=s1; 3 while(*s1++=*s2++) 4 ; 5 return p; 6}

c

1char *strcpy2(char *s1,const char *s2){ 2 3 while(*s1++=*s2++) 4 ; 5 return s1; 6}

c

1int main(void){ 2 char s1[]="abcdef"; 3 char s2[]="ABCD"; 4 char *s3=strcpy2(s1,s2); 5 printf("%s\n",s1); 6 printf("%s\n",s3); 7 return 0; 8} 9実行結果 10ABCD 11f

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

while中の*s1++によりs1のアドレスが終端の位置まで移動しており、関数の最初の位置から変更されています。

C

1char *strcpy2(char *s1,const char *s2){ 2 3 while(*s1++=*s2++)//★繰り返すたびにs1が+1される 4 ; 5 return s1;//★復帰時にはNULL終端を書き込んだ次の位置になっている 6}

投稿2020/05/06 08:02

etsuhisa

総合スコア416

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kelt22

2020/05/06 09:56

なるほど。だから返却値用にpを用意する必要があるのですね。理解できました。ありがとうございました。
guest

0

返却値がおかしくなることについて解説してくださると嬉しいです。

ループを回しながらs1++としていっているので、当然値は変化します。

*s1++は、*(s1++)と解釈されます。変化するのはアドレスの方です)

投稿2020/05/06 08:01

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問