C 指向指针的指针不';t存储所有值—;只有最后一个
问题是当我试图打印C 指向指针的指针不';t存储所有值—;只有最后一个,c,C,问题是当我试图打印 (*names)[*number],我只存储最后一个 我将用一个例子来解释我的意思-我想要的是: (*names)[0] = "john" (*names)[1] = "bill" (*names)[2] = "nick" 当我打印(*names)[*number]的值时,我得到的是: (*names)[0] = "nick" (*names)[1] = "nick" (*names)[2] = "nick" 代码如下: int GetFiles(char *
(*names)[*number]
,我只存储最后一个
我将用一个例子来解释我的意思-我想要的是:
(*names)[0] = "john"
(*names)[1] = "bill"
(*names)[2] = "nick"
当我打印(*names)[*number]
的值时,我得到的是:
(*names)[0] = "nick"
(*names)[1] = "nick"
(*names)[2] = "nick"
代码如下:
int GetFiles(char **dir,char ***names,int *number)
{
struct dirent *dp;
DIR *fd;
int i;
if ((fd = opendir(*dir)) == NULL)
{
printf("Can't open directory %s!\n",*dir);
return 0;
}
*number = 0;
//*names = (char**)malloc(((*number)+1) * sizeof(char*));
*names = (char**)malloc(17*sizeof(char*));
while ((dp = readdir(fd)) != NULL)
{
if (!strcmp(dp->d_name, ".") || !strcmp(dp->d_name, ".."))
{
continue;
}
(*names)[*number] = dp->d_name;
(*number)++;
//*names = (char**)realloc(*names,((*number)+1) * sizeof(char*));
}
closedir(fd);
for(i=0;i<*number;i++)
{
printf("--%s\n",(*names)[i]);
}
system("PAUSE");
return 1;
}
intgetfiles(char**dir,char***名称,int*number)
{
结构方向*dp;
DIR*fd;
int i;
如果((fd=opendir(*dir))==NULL)
{
printf(“无法打开目录%s!\n”,*dir);
返回0;
}
*数字=0;
//*名称=(字符**)malloc((*数字)+1)*sizeof(字符*);
*name=(char**)malloc(17*sizeof(char*);
而((dp=readdir(fd))!=NULL)
{
如果(!strcmp(dp->d_name,“.”)| |!strcmp(dp->d_name,“…”))
{
继续;
}
(*名称)[*编号]=dp->d_名称;
(*数字)++;
//*名称=(字符**)realloc(*名称,((*编号)+1)*大小(字符*);
}
closedir(fd);
对于(i=0;itry(*名称)[*编号]=dp->d_名称;
-->(*名称)[*编号]=strdup(dp->d_名称)
谢谢BLUEPIXY,它成功了。你能给我解释一下我的代码失败的原因吗?dp->d_name
被假定为同一内存块的地址。所以复制一份。它需要以后释放。readdir
每次都返回一个指向同一结构的指针,只是填入了不同的信息。你的原版l code只保存d_name
的地址,该地址不会更改,因此数组中的每个条目都包含相同的指针。您看到的名称是返回的姓氏readdir
。感谢大家的帮助!现在一切都清楚了。