0
 DIR *ptr;  
    struct dirent *ent, ent2;
    int n=0, i=0;
    dir = ".";

    ptr = opendir(dir);
    while((ent = readdir(ptr)) != NULL) 
        { 
            if(ent -> d_type != DT_DIR)
            { 
                n++;
            }       
        }   

    char array[n][100];

    while((ent2 = readdir(ptr)) != NULL) 
        { 
            if(ent2 -> d_type != DT_DIR)
            { 
                strcpy(array[i], ent2 -> d_name);      
                i++;
            }       
        }   

在上面的 C 代码中,我尝试计算工作目录中不包括文件夹的文件数。然后使用 count 声明一个双字符数组,然后用于存储文件名。我需要声明知道文件数量的双数组。(不允许声明大数组)。当我声明具有大尺寸的双精度数组并且只是将文件名复制到它而不进行任何计数时,该代码工作正常。据我了解,变量 ent 在第一个 while 循环中发生了变化。这就是我使用不同的“struct dirent ent2”的原因。

4

1 回答 1

6

问题不在于使用相同的变量来存储结果readdir——这很好。

您的问题是每次调用时都会提高您使用readdir的位置。DIR *一旦你看到了所有的文件,那个目录指针就不能再前进了。它不会循环回到开头。

您可以使用rewinddir将其重置为目录中的第一个条目。(或关闭它并重新打开它。)

于 2015-05-02T07:18:12.800 回答