首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用C++在结构指针中填充数组

用C++在结构指针中填充数组
EN

Stack Overflow用户
提问于 2021-08-11 14:06:17
回答 1查看 44关注 0票数 0

嘿,我有个小问题:

我定义了一个结构:

代码语言:javascript
复制
typedef struct {
    char key [50][50];
    char literal [50][50];
    double numeral [50];
} skill_data;

和一个函数:

代码语言:javascript
复制
skill_data *
mongoc_fetchSkillParameter (const bson_t *recipe, char *skill_id)
{
    bson_iter_t iter;
    bson_iter_t child1;
    bson_iter_t child2;
    bson_iter_t child3;
   
    int i = 0;
    skill_data *parameterset;
    
    bson_iter_init(&iter, recipe);
   
    if (bson_iter_find (&iter, "Skills") && BSON_ITER_HOLDS_ARRAY (&iter) && bson_iter_recurse (&iter, &child1)) {
        printf ("Accessing sub-key \"%s\"\n", bson_iter_key (&iter));
        bson_iter_next (&child1);
        printf ("Accessing sub-key \"%s\"\n", bson_iter_key (&child1));
    }

    if (BSON_ITER_HOLDS_DOCUMENT (&child1) && bson_iter_recurse (&child1, &child2)) {
        bson_iter_find(&child2, "ParameterSet");
        printf ("Accessing sub-key \"%s\"\n", bson_iter_key (&child2)); 
    }

    if (BSON_ITER_HOLDS_DOCUMENT (&child2) && bson_iter_recurse (&child2, &child3)) {
        i = 0;
        while (bson_iter_next (&child3)) {
            strcpy (parameterset->key[i], bson_iter_key (&child3));
            if (bson_iter_type (&child3) == 0x01 || 0x10 || 0x12){
                parameterset->numeral[i] = bson_iter_as_double (&child3);
            }
            else if (bson_iter_type (&child3) == 0x02){
                strcpy (parameterset->literal[i], bson_iter_utf8 (&child3, NULL));
            }
            i++;    
        }
    }
 
    return parameterset;
}

我正在尝试填充结构中的数组,然后将指针传递给main函数。据我所知,函数bson_iter_utf8()和bson_iter_key()都返回字符串上的指针:

代码语言:javascript
复制
const char *
bson_iter_utf8 (const bson_iter_t *iter, uint32_t *length);

它在初始化简单数组时起作用,但现在嵌入到一个struct指针中,我似乎遇到了麻烦。谁能帮帮我?:)谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-11 14:15:52

在这里,您声明了一个指向skill_data的指针,但它实际上并没有指向任何分配的内存:

代码语言:javascript
复制
skill_data *parameterset;

解决此问题的替代方法:

代码语言:javascript
复制
#include <stdlib.h>
代码语言:javascript
复制
skill_data *parameterset = malloc(sizeof *parameterset);

代码语言:javascript
复制
skill_data *parameterset = calloc(1, sizeof *parameterset); // zero-initialized

注意:当你使用完指针时,你应该在它上面调用free

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68743606

复制
相关文章

相似问题

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