我一直在尝试通过引用向函数发送指向指针(我们可以将其称为字符串数组或字符数组的数组)的指针,因为我需要更新它。我不希望函数返回指针指针(我工作的那个),因为我希望返回的是数组的大小。
这是我为测试目的而创建的一个工作函数,它返回指向指针的指针,以及调用方法:
#include <stdio.h>
char **populate_items() {
char **items;
int i;
items = (char **) malloc(sizeof(char*) * 3);
for (i=0; i<3; i++)
*(items+i) = (char *) malloc(sizeof(char) * 10);
items[0] = "1234567890";
items[1] = "2345678901";
items[2] = "3456789012";
return items;
}
int main(int argv, char *argc) {
char **items;
int i;
items = populate_items();
for(i=0; i<3; i++)
printf("%s\n", items[i]);
return 0;
}
这是我认为函数和函数的调用,它获取指针作为引用的指针应该看起来像,但我在尝试打印项目[1]或项目[2]时遇到分段错误
#include <stdio.h>
populate_items(char ***items) {
int i;
*items = (char **) malloc(sizeof(char*) * 3);
for (i=0; i<3; i++)
*(items+i) = (char *) malloc(sizeof(char) * 10);
*items[0] = "1234567890";
*items[1] = "2345678901";
*items[2] = "3456789012";
}
int main(int argv, char *argc) {
char **items;
int i;
populate_items(&items);
for(i=0; i<3; i++)
printf("%s\n", items[i]);
return 0;
}
在我脑海中创建的抽象中,函数应该没问题,但是当然没有给出我的分段错误。我已经设法理解指向指针的指针是如何正常工作的,但我认为我无法理解指向指针概念的指针如何转换为代码。
那么我错过了什么?
答案 0 :(得分:1)
您忘记了取消引用,并且*
与[]
的优先顺序错误:
populate_items(char ***items) {
int i;
*items = (char **) malloc(sizeof(char*) * 3);
for (i=0; i<3; i++)
*(*items+i) = (char *) malloc(sizeof(char) * 10);
(*items)[0] = "1234567890";
(*items)[1] = "2345678901";
(*items)[2] = "3456789012";
}
但请注意,作业
(*items)[0] = "1234567890";
等。丢失刚刚分配的内存的唯一句柄。
答案 1 :(得分:-1)
你可以使用如下
#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>
char*** populate_items(char ***items)
{
int i;
items = (char ***) malloc(sizeof(char*) * 3);
for (i=0; i<3; i++)
*(items + i) = (char **) malloc(sizeof(char) * 10);
**(items + 0) = "1234567890";
**(items + 1) = "2345678901";
**(items + 2) = "3456789012";
return items;
}
int main(int argv, char *argc)
{
char **items;
int i;
char *** res = populate_items(&items);
for(i=0; i<3; i++)
printf("%s\n", **(res + i));
return 0;
}