带指针声明的C动态结构赋值

带指针声明的C动态结构赋值,c,struct,typedef,C,Struct,Typedef,程序在分配任务时崩溃。我怎样才能让它工作呢?提前谢谢。对不起,如果是转售。在任何地方都找不到类似的例子 #include <stdio.h> typedef struct _kv { char *key; char *value; } _kv; typedef struct _kvs { _kv *kv; int size; } _kvs; main() { _kvs a; a.kv[0].key = "This is

程序在分配任务时崩溃。我怎样才能让它工作呢?提前谢谢。对不起,如果是转售。在任何地方都找不到类似的例子

#include <stdio.h>

typedef struct _kv
{
    char *key;
    char *value;
} _kv;

typedef struct _kvs
{
    _kv *kv;
    int size;
} _kvs;

main()
{
    _kvs a;

    a.kv[0].key     = "This is key One";
    a.kv[0].value   = "This is value One";

    a.size = 1;

    printf("%s = %s\n", a.kv[0].key, a.kv[0].value);
}
#包括
类型定义结构
{
字符*键;
字符*值;
}_千伏;
类型定义结构
{
_千伏*千伏;
整数大小;
}_kvs;
main()
{
_kvs-a;
a、 kv[0].key=“这是键一”;
a、 kv[0].value=“这是一个值”;
a、 尺寸=1;
printf(“%s=%s\n”,a.kv[0]。键,a.kv[0]。值);
}

您已经创建了指针,但没有为内存腾出空间。您需要使用
malloc
将一些内存与指针关联起来

a.size = 1;
a.kv = malloc ( a.size * sizeof ( _kv ) );
int i;
const int string_sz = 80;   // Or whatever else the string size should be
for ( i = 0; i < a.size; i++ )
{
    a.kv[i].key = malloc ( string_sz );
    a.kv[i].value = malloc ( string_sz );
}

strcpy ( a.kv[i].key, "This is key one" );
strcpy ( a.kv[i].value, "This is value one" );
a.size=1;
a、 kv=malloc(a.尺寸*尺寸(_-kv));
int i;
常量int字符串_sz=80;//或者字符串大小应该是什么
对于(i=0;i
无法延迟未初始化的指针,必须首先确保它们指向有效内存

_kvs a;

a.kv = malloc(1 * sizeof *a.kv);  /* Allocate a single _kv. */
a.kv[0].key = "key";
a.kv[0].value = "value";
a.size = 1;
也可以使用堆栈上的内存:

_kv my_kvs[1];
_kvs a;

a.kv = my_kvs;
a.kv[0].key = "key";
a.kv[0].value = "value";
a.size = 1;