2016-03-27 7 views
0
char *p; 
fgets(p,10,stdin); 

なぜ私のプログラムがクラッシュするのですか?私はFgetsでcharポインタを使うことはできないようですが、配列を使うことができますので意味がありません。fgetsを使用して文字ポインタプログラムのクラッシュを保存する

+1

charポインタは配列ではありません。 –

+0

まず、間接参照する前に有効なものを指し示す必要があります。それらを介して書き込むようにしてください。 –

+0

本当ですか?私の理解は弱いと思う。私は配列が単なるポインタであることを読んでいます。 – qaispak

答えて

1

私はFGETSのcharポインタを使用することはできませんように思えるが、私は配列

いいえ、あなたは限り、あなたはにそれを渡す前にポインタにメモリを割り当てるように、両方を使用することができますを使用することができますfgets()。この場合

は、ポインタを使用して、

char *p; 

pが無効である任意のメモリ位置に初期化されないと点れます。 pでメモリ位置ポインタを読み書きする前に、適切なメモリをpに割り当てる必要があります。

+0

ユーザーからの入力の長さがわからない場合、どのくらいのメモリをpに渡すのかを知るにはどうすればよいですか? – qaispak

+0

@ qaispak長さを知っていなければなりません。それ以外の場合、_array_はどのように機能するとお考えですか? –

+0

申し訳ありませんが、それは私が実際に意味していたことです:「アレイ(私が長さを知っているとき)、私は入力を得ることができますが、私は長さを知らないとそれを得る方法を知りたい...私は(しかし私はポインタの長さを定義する必要があるので間違っています) – qaispak

関連する問題