如何在函数内初始化和分配char **参数

时间:2014-08-27 18:45:41

标签: c pointers memory-management arguments

我有一个由readfile调用的main函数。标准是我必须将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确定。

如何在readfile函数中分配此变量?

2 个答案:

答案 0 :(得分:1)

有两种解决方案:

  1. 在主

  2. 中分配内存
  3. 传递指针的地址,如下所示:

    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); 
    }
    

答案 1 :(得分:0)

也许您希望char*data=NULL;中有main,然后在那里拨打readfile(&data);。对data内的正式参数readfile的任何更改都不会传播给调用者(因为C在传递参数时具有call by value语义)。

此外,您应该始终测试malloc的结果,例如

data = malloc(1000);
if (!data) { perror("malloc data"); exit(EXIT_FAILURE); };

你可能应该使用

初始化获得的内存区域
memset (data, 0, 1000);

或只是使用calloc来获取归零内存。

如果您从&data传递main,则将readfile的正式论证声明为char**ptr,并在readfile*ptr = malloc(1000);之类的内容。 ..

顺便说一句,你考虑过使用getline(3)吗?它可能是相关的。