2017-12-07 23 views
0

一部の文字列を読み込み、行列形式で出力しようとしています。文字列をchar *配列に読み込む際にセグメントエラーが発生する

int main(int argc, char **argv) 
{ 
    char *buffer[BUFFER_SIZE]; 
    for(size_t i = 0; i < BUFFER_SIZE; i++) 
    { 
     scanf("%s",buffer[i]); /**This line is causing segment fault **/ 
    } 

    for(size_t i = 0; i < BUFFER_SIZE; i++) 
    { 
     for(size_t j = 0; j < strnlen(buffer[i], MAX); j++) 
     { 
      printf("%c ",buffer[i][j]); 
     } 
     printf("\n"); 
    } 

} 

私はここで何が欠けていると思いますか?

+0

バッファがヌルで終了していますか? – lamandy

+3

BUFFER_SIZE文字列の配列を宣言しましたが、文字列自体にメモリを割り当てていません。 'buffer'は1つの文字列であると仮定されていますか? –

+0

Manvendra Singh、 'scanf("%s "、buffer [i]);'が呼ばれたときのポインタ 'buffer [i]'の値は? – chux

答えて

3

char *buffer[BUFFER_SIZE]は、文字ポインタの配列です。あなたのコードが今の通り、buffer[i]scanf("%s",buffer[i])に初期化されていないchar *です。このポイントの前に文字列を格納するには、scanfのメモリ(malloc、おそらく)を割り当てる必要があります。

+0

ありがとう、私はscanfの直前でmallocを呼び出すことでコードを修正することができました。 –

関連する問題