二维字符串指针
Two-dimensional string pointer
在调试本程序的过程中,发现二维对象后面不能加NULL。
void list_dir(char **dirp_array)
{
char *dir_name = "./";
DIR *dp;
struct dirent *dirp;
if ((dp = opendir((const char *)dir_name)) == NULL){
perr_exit("opendir errno");
}
while((dirp = readdir(dp)) != NULL){
(* dirp_array) = strdup((char *)dirp->d_name);
printf("%s\n",(* dirp_array));
dirp_array ++;
//dirp_array += strlen(*dirp_array);
}
*dirp_array = NULL;
closedir(dp);
}
修改后,我想得到我定义的二维h。
所以,我在这里定义了一个函数。
void chack_array(char **array)
{
while(array != NULL){
printf("%s\n",(* array));
array ++;
}
}
main(){
char *dirp_array[256];
list_dir(dirp_array);
chack_array(dirp_array);
}
但我核心转储
这一行:
dirp_array = NULL;
应该是
*dirp_array = NULL;
您的第一个版本不会更改调用者提供的数组的内容。它只是说 dirp_array
指针现在是 NULL
,即没有指向任何数组。你想将 NULL
存储到调用者数组中的一个元素,你通过上面的第二个版本来实现,取消引用指针。
在调试本程序的过程中,发现二维对象后面不能加NULL。
void list_dir(char **dirp_array)
{
char *dir_name = "./";
DIR *dp;
struct dirent *dirp;
if ((dp = opendir((const char *)dir_name)) == NULL){
perr_exit("opendir errno");
}
while((dirp = readdir(dp)) != NULL){
(* dirp_array) = strdup((char *)dirp->d_name);
printf("%s\n",(* dirp_array));
dirp_array ++;
//dirp_array += strlen(*dirp_array);
}
*dirp_array = NULL;
closedir(dp);
}
修改后,我想得到我定义的二维h。 所以,我在这里定义了一个函数。
void chack_array(char **array)
{
while(array != NULL){
printf("%s\n",(* array));
array ++;
}
}
main(){
char *dirp_array[256];
list_dir(dirp_array);
chack_array(dirp_array);
}
但我核心转储
这一行:
dirp_array = NULL;
应该是
*dirp_array = NULL;
您的第一个版本不会更改调用者提供的数组的内容。它只是说 dirp_array
指针现在是 NULL
,即没有指向任何数组。你想将 NULL
存储到调用者数组中的一个元素,你通过上面的第二个版本来实现,取消引用指针。