首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用指针声明的C动态结构赋值

使用指针声明的C动态结构赋值
EN

Stack Overflow用户
提问于 2013-05-31 19:44:47
回答 2查看 498关注 0票数 0

程序在接近赋值时崩溃。我怎么才能让它工作呢?提前谢谢。如果是转载的话很抱歉。在任何地方都找不到类似的示例。

代码语言:javascript
复制
#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);
}
EN

回答 2

Stack Overflow用户

发布于 2013-05-31 19:46:41

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

代码语言:javascript
复制
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" );
票数 1
EN

Stack Overflow用户

发布于 2013-05-31 19:49:20

无法延迟未初始化的指针,必须首先确保它们指向有效的内存。

代码语言:javascript
复制
_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;

或者,您可以使用堆栈上的内存:

代码语言:javascript
复制
_kv my_kvs[1];
_kvs a;

a.kv = my_kvs;
a.kv[0].key = "key";
a.kv[0].value = "value";
a.size = 1;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16856521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档