使用自定义函数初始化Struct?

use*_*348 3 c struct

我有一个结构,以及它的构造方法.但是,我无法正确创建结构初始化.在参数中,我传递一个指向该结构类型的指针,以及它的所有实例变量(抱歉使用java术语,对C来说是新的).这是我的方法代码.

 typedef struct anagramElement anagramElement;
 struct anagramElement {
    char* word;
    char* key;
 };

void createAnagramElement(char* const word, char* const key, anagramElement* rv)
{
    rv = (anagramElement*) malloc(sizeof(anagramElement));
    rv->word = word;
    rv->key = key;

}
Run Code Online (Sandbox Code Playgroud)

在主要之后,传递anagramElement*ptr,char*Word,char*key,当打印元素数据时,会发生分段错误.注意:我无法更改参数或方法返回类型.

Joh*_*136 6

你正在经历rv价值.你做的任何事情都不会"超越"函数调用.为了避免双指针,重构因此createAnagramElement()返回指针.

anagramElement* createAnagramElement(char* const word, char* const key)
{
    // don't cast the result of malloc()
    anagramElement* rv = malloc(sizeof(anagramElement));
    if (rv != NULL) {
        // Just storing pointers to strings (not copies) so you need to be
        // sure the strings don't go out of scope...
        rv->word = word;
        rv->key = key;
    }
    return rv;
}
Run Code Online (Sandbox Code Playgroud)

如果你不能改变参数(每条评论),也许createAnagramElement()应该初始化已经分配的anagramElement:

void createAnagramElement(char* const word, char* const key, anagramElement* rv)
{
    // Don't change value of rv, just change values in the struct.
    // rv = (anagramElement*) malloc(sizeof(anagramElement));
    // Should also NULL check rv, but ignoring for now.
    rv->word = word;
    rv->key = key;
}
Run Code Online (Sandbox Code Playgroud)

你会称之为:

anagramElement    instance;
createAnagramElement("hello", "world", &instance);
Run Code Online (Sandbox Code Playgroud)