C言語をやっていまして疑問があります。
プログラミングの質問サイトで訊けば良いのですが、結果が分かったのですが原因とか理由が知りたく、また、質問サイトで訊くのも緊張してしまうので、誰か親切な人がいたら教えてほしいという程度の質問です。
さて、
scanfという入力した文字列をメモリに取り込む関数がありますが、取り込む変数を配列にすればうまくいくのですが、ポインタだとできないのです。
具体的にソースなどを書きます。
まず、
-----------------------------------------
#include<stdio.h>
int main()
{
char a[60];
printf("文字列入力\n" );
scanf("%s",a);
printf("結果-%s\n", a);
return 0;
}
こんなソースでコンパイルします。
作業環境は、Linux Mint コンパイラはgccです。
実行結果です。
------------------------------------------------------------
$ gcc scanf.c
$ ./a.out
文字列入力
adgsfshghshfhsfh
結果-adgsfshghshfhsfh
$
------------------------------------------------
ちゃんとできました。
次に、入力する変数をポインタに変えた場合です。
------------------------------------------------------------------
#include<stdio.h>
int main()
{
char *a;
printf("文字列入力\n" );
scanf("%s",a);
printf("結果-%s\n", a);
return 0;
}
------------------------------------------------
変数を配列からポインタに変更してコンパイル、実行の結果です。
----------------------------------------------------------
$ gcc scanf.c
$ ./a.out
文字列入力
aggasfdsfdhas
結果-(null)
$
------------------------------------------------------
さあ、どうしてこうなるのか分かる人がいたら教えてください。という話です。
よろしくおねがいします。
0 件のコメント:
コメントを投稿