2013-05-31 56 views
0

程序在赋值附近崩溃。我怎样才能使它工作?提前致谢。对不起,如果它是转发。在任何地方找不到类似的例子。带指针声明的C动态结构赋值

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

回答

1

您已经创建了指针,但没有为内存腾出空间。您需要通过可能使用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"); 
0

未初始化的指针不能被引用,你必须首先确保它们指向有效的内存。

_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;