gpt4 book ai didi

c - 动态分配指向数组的指针

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

我一直在搜索并尝试运行简单的测试程序,但我仍然无法弄清楚这个:

是否可以在纯 C 中动态分配指向数组的指针?

我想完成的是将一个字符串复制到一个 char[20] 数组中,但是这些 char 数组的数量是未知的。我声明的变量是

char (*value)[20]

据我了解,这是一个指向 20 个字符的数组的指针,这正是我所需要的

但是,我该如何为这个变量分配内存呢?在我不知道将存在的 char[20] 数量的情况下,我该如何动态地做到这一点?我是否认为这是我的设计问题的解决方案?

谢谢。

最佳答案

如果您想要一个大小不断增长的数组,您别无选择,只能动态分配内存,例如,如果您知道所有字符串将恰好 20 个字符:

#define STR_SIZE 20
char* values = NULL;
int nb = 0;

...

// Called every time a string is received
// Here valuesPtr is a char** since we want to change values
void appendStr(char** valuesPtr, int* nb, char* string) {
if (*nb == 0) { // First item
*valuesPtr = malloc(STR_SIZE);
} else { // The size of the array changes : realloc it
*valuesPtr = realloc(*valuesPtr, STR_SIZE * (*nb + 1));
}

if (*valuesPtr == NULL) { // Something went wrong !
perror("malloc/realloc");
exit(1);
}

// Copy the new string at the right place
memcpy(*valuesPtr + STR_SIZE * (*nb), string, STR_SIZE);
*nb++;
}

在其余代码中,访问第 n 个字符串是这样完成的:

values + (STR_SIZE * nb)

关于c - 动态分配指向数组的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16846399/

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