如何通过传递变量

时间:2019-01-18 09:54:46

标签: c string multidimensional-array dynamic

谁能给我一个示例,说明如何通过传递数组长度变量来在C中创建2D char数组。

//Current program
int i;
int seq_cnt;    
exec sql    
        select count(0)     
        into seq_cnt     
        from    table;    
char tmp1[50][5+1];       
char tmp2[50][5+1];   

for(i=0;i < seq_cnt ; i++){   
     strcpy(tmp1[i],"something");    
     strcpy(tmp2[i],"something");    
}     

现在我想要的是tmp1tmp2的数组大小,我想使用seq_cnt来声明tmp1和{{1 }}而不是对其进行硬编码(50)。

like:

tmp2

我是C的新手。

1 个答案:

答案 0 :(得分:1)

  

我想使用seq_cnt声明tmp1的实际大小

char (*tmp1)[5+1] = malloc(seq_cnt * sizeof *tmp1);

更新C中星号*的三种不同用法。

  1. 类型/变量定义

    这里

    char (*tmp1)[5+1]
    

    星号用于定义指针,即指向char[5+1]数组的指针。

    请不要因为括号是强制性的,因为char *tmp[5+1]会定义一个指向char的6个指针的数组。

  2. 间接(或取消引用)运算符

    这里

    sizeof *tmp1
    

    星号用于告诉编译器不要采用tmp1的大小,该大小将是指针的大小,而是tmp1所指向的大小,即{{1} }。

    或者,可以写char[5+1]。请注意,括号不属于sizeof (char[5+1]),因为它不是函数,而是运算符。

  3. 乘法运算符

    这里

    sizeof

    星号用于表示普通乘法,即计算seq_cnt * sizeof ... 与某物大小的乘积。

因此所有top语句中的所有内容将seq_cnt所需的字节分配seg_cnt倍,并分配分配给char[5+1]的块的第一个字节的地址,使其指向足够存储tmp1的{​​{1}}数组的内存。