2016-10-12 38 views
-3

この手順のデバッグの過程で、ターゲットの背後にある2次元がNULLを追加できないことがわかりました。2次元文字列ポインタ

void list_dir(char **dirp_array) 
{ 
    char *dir_name = "./"; 
    DIR *dp; 
    struct dirent *dirp; 

    if ((dp = opendir((const char *)dir_name)) == NULL){ 
     perr_exit("opendir errno"); 
    } 

    while((dirp = readdir(dp)) != NULL){ 
     (* dirp_array) = strdup((char *)dirp->d_name); 
     printf("%s\n",(* dirp_array)); 
     dirp_array ++; 
     //dirp_array += strlen(*dirp_array); 
    } 
    *dirp_array = NULL; 
    closedir(dp); 
} 

変更後、私は定義した2次元hを取得したいと思います。 ここで関数を定義します。

void chack_array(char **array) 
{ 
    while(array != NULL){ 
     printf("%s\n",(* array)); 
     array ++; 
    } 
} 

main(){ 
    char *dirp_array[256]; 
    list_dir(dirp_array); 
    chack_array(dirp_array); 
} 

が、私はコア

+0

私はNULLフラグを取得できませんが、私は私が停止することができないことを意味します。 – haochenghhc

+2

あなたはどの言語を使用しているかを記述し、コードを読みやすくしてください。 – Nurjan

+0

OK、私は修正する必要があります** while(array!= NULL)** ** while(* array!= NULL)** – haochenghhc

答えて

1

この行をダンプするには:

dirp_array = NULL; 

*dirp_array = NULL; 

はあなたの最初のバージョンは、呼び出し側が提供する配列の内容を変更しないであるべき。ただ、dirp_arrayポインターがNULLになっている、つまり配列を指していないと言います。呼び出し元の配列内の要素にNULLを格納したい場合は、上の2番目のバージョンでポインタを逆参照します。

+0

変更後、私は定義した2次元を取得したいと思います。 ** – haochenghhc

+0

** 空隙chack_array(CHAR **配列) {\t一方(配列= NULL!){ \t \tのprintf( "%sのを\ n"、(*配列))。 \t \t配列++; \t} } ** とmain() ** char * dirp_array [256]; \t list_dir(dirp_array); \t chack_array(dirp_array); ** ですが、コアダンプがあります。 – haochenghhc

+0

@haochenghhcあなたの 'dirp_array'は二次元配列ではないことに注意してください。ポインタの配列(charへのポインタを指すポインタ)です。同じ 'foo [row] [column]'構文でインデックスすることができたとしても、charの2次元配列を持つこともできます。 C配列とポインタ、特にそれらを混合することはむしろ複雑な問題であり、配列を関数に渡すことはさらに複雑です。 – hyde

関連する問題