2016-11-11 9 views
0

私のコードでは、getline()を使用して各文字列を取り込むために3つの文字列と配列の配列を作成します。ループ内でgetline()を使用したときのセグメンテーションフォルト

int i; 
size_t n = 100; 
char (*words[3])[100]; 
for (i = 0; i < 3; i++) 
{ 
    getline(&words[i], &n, stdin); 
    printf("%s\n",words[i]); 
}  

コマンドラインに3番目の文字列を入力すると、セグメント化エラーが発生します。
さらに、3を5に置き換えた場合、最初の文字列を入力するとセグメント化エラーが発生します。

So 1)私はそれを与えるすべての3または5または任意の文字列を格納するプログラムを取得できますか?
2)3を5に置き換えた場合、最初の文字列でエラーが発生します。

+2

1つ以上のポインタが関わっていることを意味しますが、あなたはそれらを何かに向けさせていません。 –

+0

私は実際には関数ポインタとしても解釈されるかもしれないと思います。 – SenselessCoder

+1

@ n.m。ポインタが 'NULL'に初期化されている場合、' getline'はこれを行います。 – mch

答えて

3

あなたはポインタの配列としてwordsを宣言し、man pageに従ってNULLに初期化する必要があります、あなたがwords` `の宣言に '*'を有する

char *words[3] = {NULL}; 

http://ideone.com/GxV9qy

+0

混乱の原因の一つは、Linuxの端末で 'man 3 getline'を実行しているマニュアルページが大きく異なっていることです。 'n'は0にする必要がありますが、manページでは' n'は無視されます。 – Sfou

関連する問題