谁能给我一个示例,说明如何通过传递数组长度变量来在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");
}
现在我想要的是tmp1
和tmp2
的数组大小,我想使用seq_cnt
来声明tmp1
和{{1 }}而不是对其进行硬编码(50)。
like:
tmp2
我是C的新手。
答案 0 :(得分:1)
我想使用seq_cnt声明tmp1的实际大小
做
char (*tmp1)[5+1] = malloc(seq_cnt * sizeof *tmp1);
更新C中星号*
的三种不同用法。
类型/变量定义
这里
char (*tmp1)[5+1]
星号用于定义指针,即指向char[5+1]
数组的指针。
请不要因为括号是强制性的,因为char *tmp[5+1]
会定义一个指向char
的6个指针的数组。
间接(或取消引用)运算符
这里
sizeof *tmp1
星号用于告诉编译器不要采用tmp1
的大小,该大小将是指针的大小,而是tmp1
所指向的大小,即{{1} }。
或者,可以写char[5+1]
。请注意,括号不属于sizeof (char[5+1])
,因为它不是函数,而是运算符。
乘法运算符
这里
sizeof
星号用于表示普通乘法,即计算seq_cnt * sizeof ...
与某物大小的乘积。
因此所有top语句中的所有内容将seq_cnt
所需的字节分配seg_cnt
倍,并分配分配给char[5+1]
的块的第一个字节的地址,使其指向足够存储tmp1
的{{1}}数组的内存。