我试图使用指针而不是大小声明来定义数组,因为我不知道地图可能有多少元素.尝试链表但没有成功.如果这是一份报告,我很抱歉.我是新手请原谅,如果它看起来像一个愚蠢的问题.
#include<stdio.h>
typedef struct _keyValue
{
char *key;
char *value;
} _keyValue;
typedef struct _keyValues
{
/* _keyValue keyValue[5]; - This works*/
_keyValue *keyValue;
int size;
} _keyValues;
_keyValues map;
main()
{
map.keyValue[0].key = "Key One";
map.keyValue[0].value = "Value One";
map.keyValue[1].key = "Key Two";
map.keyValue[1].value = "Value Two";
map.size = 2;
printf("Key: %s Value: %s", map.keyValue[0].key, map.keyValue[0].value);
}
Run Code Online (Sandbox Code Playgroud)
map.keyValue在你的例子中是一个未初始化的指针.您需要通过使用分配内存来为阵列提供存储malloc
main()
{
map.keyValue = malloc(sizeof(*map.keyValue) * 2);
map.size = 2;
map.keyValue[0].key = "Key One";
map.keyValue[0].value = "Value One";
Run Code Online (Sandbox Code Playgroud)
您可以稍后使用扩展数组 realloc
int newMapSize = ...
_keyValue* temp = realloc(map.keyValue, sizeof(*map.keyValue) * newMapSize);
if (temp == NULL) {
/* allocation failed. Handle out of memory error and exit */
}
map.keyValue = temp;
map.size = newMapSize;
// map.keyValue[0..newMapSize-1] are now available
Run Code Online (Sandbox Code Playgroud)