Arrays 在C语言中将指针传递到函数中

Arrays 在C语言中将指针传递到函数中,arrays,c,function,pointers,Arrays,C,Function,Pointers,我正在做一个课堂专题,我还在学习C 目标是询问用户今天有多少商品可供销售,然后要求他们将这些商品逐个输入新行,并将它们输入到字符串数组中 然后将数组打印为列表以显示可用项 我们不能使用静态声明的数组,只能使用指针 这里的功能是必需的。我需要让get_items()函数修改数组,而不是返回结果 我在让get_items()工作时遇到了很多麻烦。当我去打印数组的项目时,我尝试的任何操作都会以“exited,segmentation fault”或打印(NULL)结束 任何建议,使这项工作将不胜感激

我正在做一个课堂专题,我还在学习C

目标是询问用户今天有多少商品可供销售,然后要求他们将这些商品逐个输入新行,并将它们输入到字符串数组中

然后将数组打印为列表以显示可用项

我们不能使用静态声明的数组,只能使用指针

这里的功能是必需的。我需要让get_items()函数修改数组,而不是返回结果

我在让get_items()工作时遇到了很多麻烦。当我去打印数组的项目时,我尝试的任何操作都会以“exited,segmentation fault”或打印(NULL)结束

任何建议,使这项工作将不胜感激

char* get_item() {

  char *item = calloc(61,sizeof(char));
  scanf(" %[^\n]",item);

  return item;

}
void get_项(char***项,int*num_项){
int i;
printf(“在一行中输入%d个可用项:\n”,*num\u items);
对于(i=0;i<*num_项;i++){
**(items+i)=获取_item();
}
}
int main(无效){
char**items=NULL;/*这是成分数组开头的指针*/
int num_items=-1,
int i;
printf(“我们今天有多少可用项目?”);
scanf(“%d”项和num_项);
items=calloc(num_items,sizeof(char*));
获取\u项(&items,&num\u项);
printf(“今天可用的项目有:\n”);
对于(i=0;i
获取项目中,
**(项目+i)
应为
*(*items+i)
(*items)[i]

但是,
get\u items
的指针解引用级别太多。以下更简单:

void get_items(char **items, int num_items){

  int i;

    printf("Enter the %d available items one to a line: \n",num_items);


  for(i = 0; i < num_items; i++) {

    *(items+i) = get_item();  // or more readable: items[i] = get_item();

  }

}

原始原型
void get_items(char***items,int*num_items)
建议
main
中的一些代码应该在
get_items
中执行:

void get_items(char ***items, int *num_items){
    int i;

    printf("How many available items do we have today? ");
    scanf("%d",num_items);

    *items = calloc(*num_items,sizeof(char*));

    printf("Enter the %d available items one to a line: \n",*num_items);

    for(i = 0; i < *num_items; i++) {
        *(*items+i) = get_item();
    }
}

您不应该需要两个以上的星号。
char**
是一个字符串数组。
void get\u items(…)
@wildplasser:因为它正在修改数组。这是不需要的,calloc()可以在get\u items()中完成。旁白:对第二个参数(
num\u items
)使用
int*
)只需使用
int
void get_items(char **items, int num_items){

  int i;

    printf("Enter the %d available items one to a line: \n",num_items);


  for(i = 0; i < num_items; i++) {

    *(items+i) = get_item();  // or more readable: items[i] = get_item();

  }

}
  get_items(items,num_items);
void get_items(char ***items, int *num_items){
    int i;

    printf("How many available items do we have today? ");
    scanf("%d",num_items);

    *items = calloc(*num_items,sizeof(char*));

    printf("Enter the %d available items one to a line: \n",*num_items);

    for(i = 0; i < *num_items; i++) {
        *(*items+i) = get_item();
    }
}
int main(void) {

    char **items=NULL;    /* this is the pointer for the start of the ingredients array   */
    int num_items = -1,
    int i;

    get_items(&items,&num_items);

    printf("Available items today are: \n");

    for(i = 0; i < num_items; i++) {
        printf("%i. %s\n",i+1,*(items+i));
    }
}