如果你不知道它们会有多大,那么使用动态分配。这里的主要功能是malloc和free。
如果您不知道结构有多大,这里有一个关于如何使用结构的建议:
首先在您的代码中包含以下内容:
#include <stdio.h> /* for printf */
#include <string.h> /* for strcpy, as you cannot directly assign strings to a malloc'd pointer */
#include <stdlib.h> /* for malloc and free, for managing memory dynamically */
然后我们定义键和值的大小:
const int key_size = 10; /* let's define how big our keys and values will be */
const int value_size = 25;
这里是你如何使用你的结构:
map.size = 30; /* decide how many keyValues we will have */
map.keyValue = malloc(sizeof(_keyValue) * map.size); /* create storage big enough for 30 _keyValue structs
* malloc will allow you to assign memory to key and treat it as an array
* malloc assigns memory from the heap
* equal to the size specified (30),
* this can be potentially as large as your computer's memory */
map.keyValue[0].key = malloc(sizeof(char) * key_size); /* let's create a key at position 0 */
strcpy(map.keyValue.key, "some key"); /* copying some values into key */
map.keyValue[0].value = malloc(sizeof(char) * value_size); /* let's create some space for a value for the 0th element */
strcpy(map.keyValue.value, "some value");
... /* you process and work with those values as you see fit */
free(map.keyValue[0]) /* malloc assigned memory needs to be returned to the OS as it's manually managed,
* here we free the element at position 0 we created earlier
* if you have more than element here use a loop e.g:
* for (int i = 0; i < map.size; i++) { free(map.KeyValue[i]) }
*/
free(map.keyValue); /* free the keyValue itself that stored all the keyValue structs*/
一个提示,不鼓励以下划线开头的声明,因为它们是为语言保留的。