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 回答