2017-07-10 3 views
-4

コードがエラー*配列

#include<stdio.h> 
#include<string.h> 
#include<stdlib.h> 

int main(){ 
    char* array[1]; 
    scanf("%s",array[0]); 
    return 0; 
} 

を実行しますが、次のコードは実行されません。セグメンテーションエラーを示します。どういう理由ですか。

#include<stdio.h> 
#include<string.h> 
#include<stdlib.h> 

int main(){ 
    char* array[2]; 
    scanf("%s",array[0]); 
    scanf("%s",array[1]); 
    return 0; 
} 

私の入力は、第一の場合では結合であり、第二

+2

「array []」は初期化されておらず/割り当てられていないため、どちらもUBです。 – chux

+0

データ型が正しくありません。あなたはchar * []ではなく、char []を必要とします。配列に入力データ用の空き容量があることを確認し、読み込んだ文字数を制限してください。 char line [1024]; fgets(行、sizeof行、stdin); 1つ、簡単な方法です。 –

+0

PS:最初のバージョンは運が良いです。配列は1つのポインタ(通常は4または8バイト)のためのスペースを割り当てます。プログラムに8バイトより長い文字列を入力してから印刷してみます。 ;) –

答えて

0

array[1]array[1]で ジェームズ・ボンド はunitialisedポインタです。したがって、無効または未定義の場所にデータを書き込んでいます。ポインタは、割り当てられたメモリを参照する必要があります。

両方のコードフラグメントは正しくありませんが、ユニット化されたポインタに関するもの、有効なアドレスまたは無効なアドレスが含まれている可能性がありますが、アドレスは定義されていません。

char array[2][64]; 
scanf("%63s",array[0]); 
scanf("%63s",array[1]);