带有struct指针的C结构

Me *_*agi 3 c

我试图使用指针而不是大小声明来定义数组,因为我不知道地图可能有多少元素.尝试链表但没有成功.如果这是一份报告,我很抱歉.我是新手请原谅,如果它看起来像一个愚蠢的问题.

#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)

sim*_*onc 5

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)