我遇到了问题。说真的,我需要帮助。
我的目录SavedGames我有5个文件夹
这里只需用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个小时!! :(谢谢
答案 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;
}