2021年7月7日水曜日

scanf はポインタでは入力できないのか

 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 件のコメント:

コメントを投稿

EX6100 NETGEAR 無線LAN中継機