2
 DIR * d;
 int dsize=0;
 struct dirent * de;
 char *dir[1024];
 d=opendir(".");
 while ((de = readdir(d)))
            {                                                                               
              if((de->d_type) & DT_DIR)
                {
                  dir[dsize]= de->d_name;
                  dsize++;
                }
             }

ファイル名のアドレスをcharポインタの配列に格納しようとしています。

ポインタが少し錆びている私は戻ってポインタレビューのいくつかのページを読みましたが、何が間違っているのかわかりません..「警告:代入はキャストなしでポインタから整数になります」と言い続けます。構造体が原因で構文がオフになっていますか?

4

1 に答える 1

5

そのようにポインタを保存することはできません。それらは毎回上書きされ、呼び出すreaddirと、無効なメモリへのポインタがぶら下がっています。ディレクトリエントリを保存したい場合は、ポインタだけでなく名前全体をコピーする必要があります

char dir[1024][256];
while (de = readdir(d)) {
    if (de->d_type & DT_DIR) {
        if (dsize < 1024) {
            strcpy(dir[dsize], de->d_name);
            dsize++;
        }
    }
}

dir配列境界のチェックを忘れないでください。そうしないと、スタックが上書きされ、クラッシュする可能性があります。

于 2013-02-01T19:51:00.213 に答える