gpt4 book ai didi

c - 结构数组的值突然改变(?)

转载 作者:行者123 更新时间:2023-11-30 21:10:48 25 4
gpt4 key购买 nike

所以我已经查看这段代码几个小时了,尽管我努力用 printf 到处调试它,但我似乎无法理解发生了什么。以下函数是我的主要问题所在:

void drawFolders() {

printf("Going to call getSubFolder\n");
getSubFolders(".");

printf("DEBUG 1 - Return from getFolderName is: %s\n", getFolderName(3));

printf("DEBUG 2 - Return from getFolderName is: %s\n", getFolderName(5));

int k;

for(k = 0; k < getNumberFolders(); k++) {
printf("DEBUG INLOOP %d - Return from getFolderName is: %s\n",k, getFolderName(k));


draw_sprite(k*60 + 30, 50, folder);

//draw_string(temp[i].name,i*60 + 30, 50);

}

}

基本上,在 DEBUG1 和 DEBUG2 中,我的函数 getFolderName() 似乎工作得很好,即返回一个字符串,没有任何问题。然而,当我尝试在 for 循环中调用这个函数时,我从 getFolderName 得到的都是垃圾(除了第一个),即使 k 是 3 或 5(我之前测试过的情况) for 循环并且工作正常)。 k 没有错,因为我也打印了它。 getFolderName 对数组没有任何作用,函数如下:

char* getFolderName(int index) {
printf("Values inside getFolderName() function : %s\n", currentFolders[index].name);
return currentFolders[index].name ;

}

此外,显示 currentFolders 是什么也可能很重要:

typedef struct Directories {

char* name;
int active;

} Directory;

Directory currentFolders[30];

输出

Dec 20 22:18:48 192 kernel: Vai chamar o getSubFolder
Dec 20 22:18:48 192 kernel: Values inside getSubFolders function: .
Dec 20 22:18:48 192 kernel: Values inside getSubFolders function: ..
Dec 20 22:18:48 192 kernel: Values inside getSubFolders function: usr
Dec 20 22:18:48 192 kernel: Values inside getSubFolders function: lab4
Dec 20 22:18:48 192 kernel: Values inside getSubFolders function: proj
Dec 20 22:18:48 192 kernel: Values inside getSubFolders function: bin
Dec 20 22:18:48 192 kernel: Values inside getSubFolders function: boot
Dec 20 22:18:48 192 kernel: Values inside getSubFolders function: dev
Dec 20 22:18:48 192 kernel: Values inside getSubFolders function: etc
Dec 20 22:18:48 192 kernel: Values inside getSubFolders function: home
Dec 20 22:18:48 192 kernel: Values inside getSubFolders function: mnt
Dec 20 22:18:48 192 kernel: Values inside getSubFolders function: root
Dec 20 22:18:48 192 kernel: Values inside getSubFolders function: sbin
Dec 20 22:18:48 192 kernel: Values inside getSubFolders function: tmp
Dec 20 22:18:48 192 kernel: Values inside getSubFolders function: var
Dec 20 22:18:48 192 kernel: DEBUG 0Values inside getFolderName() function : lab4
Dec 20 22:18:48 192 kernel: DEBUG 1 - Return from getFolderName is: lab4
Dec 20 22:18:48 192 kernel: Values inside getFolderName() function : bin
Dec 20 22:18:48 192 kernel: DEBUG 2 - Return from getFolderName is: bin
Dec 20 22:18:48 192 kernel: Values inside getFolderName() function : .
Dec 20 22:18:48 192 kernel: DEBUG INLOOP 0 - Return from getFolderName is: .
Dec 20 22:18:48 192 kernel: Values inside getFolderName() function :
Dec 20 22:18:48 192 kernel: DEBUG INLOOP 1 - Return from getFolderName is:
Dec 20 22:18:48 192 kernel: Values inside getFolderName() function :
Dec 20 22:18:48 192 kernel: DEBUG INLOOP 2 - Return from getFolderName is:
Dec 20 22:18:48 192 kernel: Values inside getFolderName() function :
Dec 20 22:18:48 192 kernel: DEBUG INLOOP 3 - Return from getFolderName is:
Dec 20 22:18:48 192 kernel: Values inside getFolderName() function :
Dec 20 22:18:48 192 kernel: DEBUG INLOOP 4 - Return from getFolderName is:
Dec 20 22:18:48 192 kernel: Values inside getFolderName() function :
Dec 20 22:18:48 192 kernel: DEBUG INLOOP 5 - Return from getFolderName is:
Dec 20 22:18:48 192 kernel: Values inside getFolderName() function :
Dec 20 22:18:48 192 kernel: DEBUG INLOOP 6 - Return from getFolderName is:
Dec 20 22:18:48 192 kernel: Values inside getFolderName() function :
Dec 20 22:18:48 192 kernel: DEBUG INLOOP 7 - Return from getFolderName is:
Dec 20 22:18:48 192 kernel: Values inside getFolderName() function :
Dec 20 22:18:48 192 kernel: DEBUG INLOOP 8 - Return from getFolderName is:
Dec 20 22:18:48 192 kernel: Values inside getFolderName() function :
Dec 20 22:18:48 192 kernel: DEBUG INLOOP 9 - Return from getFolderName is:
Dec 20 22:18:48 192 kernel: Values inside getFolderName() function :
Dec 20 22:18:48 192 kernel: DEBUG INLOOP 10 - Return from getFolderName is:
Dec 20 22:18:48 192 kernel: Values inside getFolderName() function :
Dec 20 22:18:48 192 kernel: DEBUG INLOOP 11 - Return from getFolderName is:
Dec 20 22:18:48 192 kernel: Values inside getFolderName() function :
Dec 20 22:18:48 192 kernel: DEBUG INLOOP 12 - Return from getFolderName is:
Dec 20 22:18:48 192 kernel: Values inside getFolderName() function :
Dec 20 22:18:48 192 kernel: DEBUG INLOOP 13 - Return from getFolderName is:
Dec 20 22:18:48 192 kernel: Values inside getFolderName() function :
Dec 20 22:18:48 192 kernel: DEBUG INLOOP 14 - Return from getFolderName is:

我认为调用的其他函数与问题无关,但您可能想看一下,所以无论如何:

  int getSubFolders(char* foldername) {
num_folders = 0;

struct dirent *de=NULL;
DIR *d=NULL;

d=opendir(foldername);
if(d == NULL) {
perror("Couldn't open directory");
return(2);
}

int i = 0;
// Loop while not NULL
while(de = readdir(d)) {
num_folders++;
Directory temp;
currentFolders[i].name = de->d_name;

strcpy( currentFolders[i].name, de->d_name);

// printf("nome %s\n",de->d_name);

//printf("temp.name %s\n",temp.name);

// currentFolders[i] = temp;

printf("Values inside getSubFolders function: %s\n",currentFolders[i].name);

i++;
}

printCurrentFolders();

closedir(d);
return(0);

}

最佳答案

这样修复它,结构体这样声明

typedef struct Directories {
char name[256];
int active;
} Directory;

并删除此行

currentFolders[i].name = de->d_name;

该问题是由 linedir(d); 清理 opendir 使用的资源引起的,struct dirent * 是这些资源的一部分.

关于c - 结构数组的值突然改变(?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27584610/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com