- 締切済み
文字列のコピー
C言語で、文字列をコピーする関数で、処理が止まってしまいます。 以下が実行したプログラムです。 #include<stdio.h> #include<string.h> void copy(char *str2 ,char *str3){ strcpy(str2,str3); } void input(char* str){ scanf("%s",str); } int main (void){ char *a; char *b="TEST"; printf("%s\n",b); input(a); copy(b,a); printf("%s",b); return(0);} copy(b,a);で処理が止まってしまいます。入力した文字列を表示できるように、御指摘お願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- trytobe
- ベストアンサー率36% (3457/9591)
回答No.1
main 関数の中で 2つの文字列の領域を ローカルに a と b で確保していても、 copy 関数にそのアドレス(ポインタ)を渡した時点で、ローカルな変数 a と b の領域は誰も保全してくれません。 そのため、他の用途(OSや自作プログラムがつかっているライブラリ関数など)で簡単に上書きされて、そこに文字列を保存できる保証は全くないのです。 その上、文字列を保存するための先頭アドレス(ポインタ)としての a と b しか宣言していないので、その後に文字列を保存するバイト数を確保する宣言(配列で行うなど)もしていないので、ポインタだけを受け渡ししても、文字列を保存しようとしたときに「ポインタ」の変数の内容まで上書きするなどされて、動作が破たんするのです。
お礼
お返事ありがとうございます。