当函数结束时,Void *输入函数会丢失地址

时间:2017-04-23 23:30:13

标签: c pointers types

我是C lang的新手。我的代码就像:

int afunc(const struct datas *mydata, void *value) {
    value = &mydata->astring; // astring is in structure char[20]
    return 0;
}

int main (...) {
    ...
    const char *thevalue;
    if (!afunc(thedata, &thevalue) {...}
    ...
}

var值中的地址仅在函数中,当函数超过变量时,value仍为空...所以,我希望结构中的数组指针。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

使用指针传递必须在C中修改的变量。但是,如果要修改指针值,则必须将指针传递给该指针,然后取消引用函数中的指针。像这样:

int afunc(const struct datas *mydata, void **value) {
    *value = &mydata->astring; // astring is in structure char[20]
    return 0;
}

int main (...) {
    ...
    const char *thevalue;
    if (!afunc(thedata, &thevalue) {...}
    ...
}

答案 1 :(得分:2)

像这样修复

#include <stdio.h>

struct datas {
    char astring[20];
};

int afunc(const struct datas *mydata, void *value) {
    *(const char **)value = mydata->astring;
    return 0;
}

int main (void) {
    struct datas mydata = { "test_data" }, *thedata = &mydata;
    const char *thevalue;
    if (!afunc(thedata, &thevalue)) {
        puts(thevalue);
    }
}