如何在函数中初始化和分配char**参数
我有一个由如何在函数中初始化和分配char**参数,c,pointers,memory-management,arguments,C,Pointers,Memory Management,Arguments,我有一个由main调用的readfile函数。标准是我必须将char**传递到readfile,并且我必须在readfile中分配和初始化此参数。对于如何在子函数中处理char**,我有点困惑 void main() { char** data; readfile(data); } void readfile(char** data) { data = (char**)malloc(1000); //give me Segmentation fault
main
调用的readfile
函数。标准是我必须将char**
传递到readfile
,并且我必须在readfile
中分配和初始化此参数。对于如何在子函数中处理char**
,我有点困惑
void main()
{
char** data;
readfile(data);
}
void readfile(char** data)
{
data = (char**)malloc(1000); //give me Segmentation fault
data = (char*)malloc(1000); //give me " warning: assignment from incompatible pointer type" during compliation.
data = (char)malloc(1000); //give me "warning: cast from pointer to integer of different size" during compilation.
}
我试图先将指针投射到它,例如char*pdata=*data代码>
我可以使用pdata
ok
如何在readfile
函数中分配此变量?可能需要char*data=NULL代码>在main
中,然后调用readfile(&data)代码>那里。对readfile
中形式参数data
的任何更改都不会传播到调用方(因为C在传递参数时具有语义)
此外,您应该始终测试malloc
的结果,例如
data = malloc(1000);
if (!data) { perror("malloc data"); exit(EXIT_FAILURE); };
您可能应该初始化获得的内存区域,也许可以使用
memset (data, 0, 1000);
或者简单地使用calloc
获取零内存
如果从main
传递&data
,将readfile
的形式参数声明为char**ptr
,并在readfile
内部执行类似*ptr=malloc(1000)的操作代码>等
BTW,你考虑使用了吗?这可能是相关的。有两种解决方案:
在主内存中分配内存
按如下方式传递指针的地址:
void main()
{
char** data;
readfile(&data); //notice the pass of data adress to the function
}
void readfile(char*** data) //notice the extra * operator added
{
*data = malloc(1000);
}
我们不知道您的readfile
想要做什么。您的代码不读取任何文件!谢谢你的回复。要求使用char**作为参数,并在函数内分配内存。我必须能够将数组返回到main。是的,这很可爱,但是如果你需要将指针传递给指针,就不能这样做。如果你有一个指向指针的指针,你的参数必须是char***data。谢谢。我将在主内存中分配内存。我可以只做char*数据。它正在工作。