只是C语言文件夹中的错误探索

时间:2011-04-26 15:40:38

标签: c

我遇到了问题。说真的,我需要帮助。

我的目录SavedGames我有5个文件夹

  • AA
  • BB
  • lolgraa
  • FFD
  • ZZZZ

这里只需用C代码读取“SavedGames”中的文件夹,然后在屏幕上显示。

#include <stddef.h>
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
#include <windows.h>

int main (void)
{
  DIR *dp;
  struct dirent *ep;
  char *array[4];   
  int i = 0;

  dp = opendir ("SavedGames/");
   while (ep = readdir (dp)) 
    {
     array[i++] = ep->d_name;
    }
  closedir (dp);

 puts(array[0]);
 puts(array[1]);
 puts(array[2]);
 puts(array[3]);

 system("pause");

  return 0;
}

返回zzzz,zzzz,zzzz,zzzz,zzzz。

这似乎只是错误,但我花了2个小时!! :(谢谢

3 个答案:

答案 0 :(得分:3)

您忘记在存储目录时分配内存空间。

array[i] = (char*) malloc(strlen(ep->d_name) + 1);
strcpy(array[i], ep->d_name);
i++;

答案 1 :(得分:0)

char *array[4];是一个包含4个字符串指针的数组。

readdir返回一个包含字符串指针的结构,所有这些都在(进程)全局内存中,下一次调用readdir会替换当前的值。

您正在将指针复制到数组中,但这不会复制字符串。

您需要将字符串复制出struct dirent,并分配内存以存储它们。

答案 2 :(得分:-1)

以下一点hackery“有效”:

#include <stddef.h>
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
#include <windows.h>

int main (void)
{
  DIR *dp;
  struct dirent *ep;
        char *array[4]; 
        int i = 0;

  dp = opendir (".");
  for ( i = 0; i < 4; i++ ) {
       ep = readdir (dp);
       array[i] = (char *)malloc( strlen( ep->d_name ) + 1 );
       strcpy( array[i], ep->d_name );
 }
  closedir (dp);

 puts(array[0]);
 puts(array[1]);
    puts(array[2]);
    puts(array[3]);

 system("pause");

  return 0;
}