#include <stdio.h>
/* 文字列をコピーする */
char *str_copy(char *d,const char *s)
{
char *t=d;
while(*d++=*s++);
return t;
}
int main()
{
char str[128]="ABC";
char tmp;
printf("str="%s"\n",str);
printf("コピーするのは:"); scanf("%s",&tmp); puts("コピーしました"); printf("str=\"%s\"\n",str_copy(str,&tmp)); return 0;
}
ABCという文字列が初期化されていた配列に、別の文字列をコピーするようにしたものです。
最初は太文字のtmpのところをtmp[128]とやって、それ以降の&tmpの&がない状態にしてうまくいっていたのですが、このようにしたらどうなるのだろうかと思いやってみたところ、4文字までの入力ならうまくコピーされるようです。
str_copyのとこでポインタがインクリメントされているので記憶域の中にあるtmpの次のアドレスを持つものが*dに代入されるのでエラーになるかなと思いきや、4文字だけうまくいくということに疑問です。なぜ4文字だけうまくいくのでしょうか。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/09/03 00:37