gpt4 book ai didi

c - 初始化 C 结构数组,其大小在编译时未知

转载 作者:太空狗 更新时间:2023-10-29 17:05:00 25 4
gpt4 key购买 nike

我没有找到这个问题的确切答案,所以这要么是一个愚蠢的问题,要么就是显而易见的问题。我想知道它是否会产生未定义的行为。

我定义了一些结构类型:

typedef struct {
char string1[17];
char string2[33];
int someInt;
float someFloat;
} my_struct_t;

我需要该结构的多个实例(就像您在结构数组中拥有的那样),但对象的数量在编译时是未知的。

这样初始化是否正确?

my_struct_t *myStruct;
size_t noOfElements;
size_t completeSize;
int index;

/* ...code which sets the number of elements at runtime... */

completeSize = sizeof(my_struct_t) * noOfElements;

myStruct = malloc(completeSize);
memset(myStruct, 0, completeSize);

/* ...and then access it as if it were an array...*/

myStruct[index].someInt = 10; // index < noOfElements

这样做安全吗? memset() 部分是我担心的。

最佳答案

就目前而言,使用 malloc 后跟 memset 是可以的,但您可能希望考虑(未充分使用的)calloc反而。例如:

pMyStruct = calloc(noOfElements, sizeof(my_struct_t));

这将为所需数量的元素分配内存,将它们初始化为二进制零。

关于c - 初始化 C 结构数组,其大小在编译时未知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14101695/

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