gpt4 book ai didi

c - 如何将指针的指针数组传递给函数?

转载 作者:行者123 更新时间:2023-11-30 18:14:14 25 4
gpt4 key购买 nike

我知道如何修改 main 中的指针数组,但不知道当我的函数需要修改它时该怎么做。** 之间的代码是我在 main 中执行此操作而不使用函数的方式。我知道如何打印指针的指针数组。我的问题是,假设我想将这些行 ** 移到 function() 中,我需要修改什么?

代码:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

void function(char *array[], int size);
void function_print(char *array[], int size);
int main()
{
char *array[] = {0};

char word[20];

**scanf("%s", word);
int len = strlen(word) + 1;
array[size] = (char *)malloc(sizeof(len));
strlcpy(array[size], word, sizeof(array[size]));**


function(array, 0);

return 0;
}

void function(char *array[], int size)
{

}

void function_print(char *array[], int size)
{
for(int x = 0; x < size; x ++)
{
printf("%s", *array);
(array)++;
}
}


~
~

最佳答案

我做了一些编辑并意识到你的函数也会做同样的事情。因此,如果您不知道它是如何工作的,请继续阅读编辑

此外,我认为您的 main() 中有问题。首先,array[size] = (char *)malloc(sizeof(len));往往会报告错误,因为这里没有定义大小。其次,如果你所说的大小是指数组中元素的数量,那么 array[size] 会导致溢出。第三,malloc的参数应该是sizeof(char)*len,而不是sizeof(len),因为后者等于sizeof(int)。

将您的功能更改为

void function(char **, int);

并调用它

function(array, 0);

编辑

我认为“修改它”是指更改存储在数组中的指针。由于每个元素都是 char*,因此 char** 即可完成这项工作。

当您将array作为参数传递时,实际上您正在传递第一个元素的地址。然后在函数中,您通过 char** parray 接收它。由于也传递了大小,因此可以将其用作 char* parray[],并且每个元素的地址与 中的 array 完全相同main() 。因此,您对 parray 所做的任何修改都会改变 array。这就是你想要的吗?

关于c - 如何将指针的指针数组传递给函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17606293/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com