gpt4 book ai didi

c - 如何通过传递变量来创建可变大小的二维字符串数组

转载 作者:太空宇宙 更新时间:2023-11-04 03:13:16 25 4
gpt4 key购买 nike

谁能给我一个示例,说明如何通过传递数组长度的变量在 C 中创建二维字符数组。

//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声明实际的大小tmp1tmp2 而不是对其进行硬编码 (50)。

喜欢:

char tmp1[seq_cnt][5+1];     
char tmp2[seq_cnt][5+1];

我是 C 的新手。

最佳答案

I want to use the seq_cnt to declare the actual size of tmp1

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

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

  1. 类型/变量定义

    这里

    char (*tmp1)[5+1]

    星号用来定义一个指针,一个指向char[5+1]数组的指针。

    请注意,括号是强制性的,因为 char *tmp[5+1] 将定义一个包含 6 个指向 char 的指针的数组。

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

    这里

    sizeof *tmp1

    星号是用来告诉编译器不要取 tmp1 的大小,这将是一个指针的大小,而是 tmp1 指向的大小,即 char[5+1]

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

  3. 乘法运算符

    这里

    seq_cnt * sizeof ...

    星号用来表示一个普通的乘法,即计算seq_cnt和某物的大小的乘积。

所以总而言之,top 语句分配 seg_cnt 乘以 char[5+1] 需要的字节,并分配分配给的 block 的第一个字节的地址tmp1,使其指向足够的内存来容纳 char[5+1]seq_cnt 数组。

关于c - 如何通过传递变量来创建可变大小的二维字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54251444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com