C无法从函数外的字符串数组中读取
我编写了一个函数,它扫描目录并将其中的所有文件名复制到作为参数传递的C无法从函数外的字符串数组中读取,c,arrays,memory,dirent.h,C,Arrays,Memory,Dirent.h,我编写了一个函数,它扫描目录并将其中的所有文件名复制到作为参数传递的char**,我使用dirent.h获取目录中的文件,下面是我的主要函数(&C): int main(void) { char** files = 0; int size = 0, i = 0; size = scanDir(files, "C:\\Users\\user\\test"); for (i = 0; i < size; i++) { puts(fil
char**
,我使用dirent.h
获取目录中的文件,下面是我的主要函数(&C):
int main(void)
{
char** files = 0;
int size = 0, i = 0;
size = scanDir(files, "C:\\Users\\user\\test");
for (i = 0; i < size; i++)
{
puts(files[i]);
free(files[i]);
}
free(files);
getchar();
return 0;
}
int scanDir(char** files, char* path)
{
int size = 0, i = 0;
DIR* dp = 0;
struct dirent* ep = 0;
files = (char**)malloc(sizeof(char*) * size);
dp = opendir(path);
if (dp != NULL)
{
while (ep = readdir(dp))
{
files = realloc(files, sizeof(char*) * ++size);
files[i] = (char*)malloc(sizeof(char) * (strlen(ep->d_name) + 1));
strcpy(files[i], ep->d_name);
i++;
}
(void)closedir(dp);
}
return size;
}
int main(无效)
{
字符**文件=0;
int size=0,i=0;
size=scanDir(文件,“C:\\Users\\user\\test”);
对于(i=0;id_name)+1);
strcpy(文件[i],ep->d_名称);
i++;
}
(无效)closedir(dp);
}
返回大小;
}
我正在使用visual studio,在调试文件的过程中,scanDir
中的[I]
在while循环的每次迭代中都包含正确的文件名,但在for循环中,它崩溃了,在变量watch中,它在文件下说它“无法读取内存”
为什么会发生这种情况?
文件是按值传递的,因此当scanDir
赋值并返回时,更改不会传播回调用方
恐怕您需要另一个间接层次(char***
)
或者,您可以将scanDir
签名更改为return
新分配的char**
指针以及大小。基本相同问题的其他实例:,。谢谢!我返回了一个包含数组的结构&它是size@Daniel.:哦,是的,很有道理:我忘了尺寸
int main(void)
{
char** files = 0;
size = scanDir(&files, "C:\\Users\\user\\test");
...
}
int scanDir(char*** files, char* path)
{
...
*files = (char**)malloc(sizeof(char*) * size);
...
}