Я новичок в 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) {...}
    ...
}

Адрес в значении переменной находится только в функции, когда функция находится над переменной, значение все еще пусто ... Итак, я хочу указатель на массив в структуре.

Как мне это исправить?

2
user2703424 24 Апр 2017 в 02:30

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);
    }
}
2
BLUEPIXY 23 Апр 2017 в 23:52

Вы используете указатели для передачи переменных, которые должны быть изменены в 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) {...}
    ...
}
2
user7881131user7881131 23 Апр 2017 в 23:34