变量char**怎么初始化为大小可变数组

不知道这个提法对不对。。。我有一个函数返回值是char**,我得初始化,可以这样char * name[]={"","",""}是吧,这样初始化是3个空的数组。可是这个数组的大小是根据我后面交互操作时选择的数量来定的,现在初始化不知道怎么确定它的大小,char * name[]=后面可以跟一个可变的数组吗?。。。不晓得说清楚了没

char**类型变量一般用于动态使用二维数组,操作方法如下:

    定义char**类型变量,初始化成NULL,或不初始化。

    动态获得数组行数num1

    分配行指针数组空间

    再动态的获得相应的每行的数据个数num2(各行可不同)

    为每行分配相应的空间,进行数据存储

    应用完成后,要先释放每行的指针

    再释放二维指针

参考代码:

#include <stdlib.h> //malloc need
void main()
{
    char **pp=NULL ; //只有在定义时的赋值,才叫初始化,其他位置都叫赋值!
    int i,num1, num2;
    printf("input rows : "); scanf("%d", &num1 );
    pp=(char **) malloc( num1*sizeof(char *) ); //返回一个指向指针类型数据的首地址
    for( i=0;i<num1;i++ )
    {
        printf("input length of string : "); scanf("%d", &num2 );
        pp[i]=(char *)malloc(num2);
        printf("input string : "); scanf("%s", pp[i] );
    }
    //.... 对pp进行应用...
    for( i=0;i<num1;i++ ) //释放内存
        free(pp[i]);
    free(pp);
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-02-25
不可以。c语言规定定义数组的同时必须指出其长度,如果不指出其长度,则由初始化的数量来决定数组长度。
如果想使用可变的数组,建议是用指针和malloc来做,而后可以使用relloc来改变大小。
第2个回答  2014-02-25
在定义一个数组时,不能初始化一个可变数组,只能是一个确定大小的数组,
在c语言里,类似使用一个数组去获得返回值的情况,都有越界的风险,需要进行判断。
如你所提到的应用,完善的接口应该提供返回值数组的大小,或者有函数说明数组的最大值。追问

那如果我已经得到了数组大小int num,当然num是通过交互得到,怎样通过num(这里相当于参数)来初始化?

追答

不能初始化一个可变数组,

    可以定义一个指针,根据得到的num,用molloc函数获取数组;

    或者根据使用说明,初始化一个你确认会大于num的数组。

本回答被提问者采纳
相似回答