Проблема с выводом структуры

Я передаю структуру, которая содержит элемент указателя на другую структуру, но после передачи его в функцию testModule и после преобразование типа, она выводит разные символы. В чем проблема?

(Преобразовывать moduleData в void обязательно, тк это тестовый код, позже я его аргументом передам в поток)

typedef struct postFields {
    char login[56];
    char passwd[56];

} postFields;

typedef struct moduleData {
    postFields * post_fields;

} moduleData;

void * testModule(void *p_module_data) {
    moduleData * module_data = (moduleData *)&p_module_data;

    printf("%s\n", module_data->post_fields[0].login);
}



int main(int argc, char const *argv[])
{
    postFields post_fields[] = {"Dima", "Dima19930322"};
    moduleData module_data;

    module_data.post_fields = (postFields *)&post_fields;

    testModule((void *)&module_data);
    
    return 0;
}


Ответы (1 шт):

Автор решения: AlexGlebe

moduleData * module_data = (moduleData *)&p_module_data; - здесь вы берёте адрес локальной переменной. А надо было преобразовать само значение.

moduleData * module_data = (moduleData *) p_module_data;


Ещё у вас много несоответствий типов, такого делать не следует.

Перед фигурными скобками нужно ставить тип структуры, а сам массив тоже нужно со скобками.

postFields post_fields[] = {(postFields){"Dima", "Dima19930322"}};

Вы адрес массива грубо преобразовываете на адрес элемента, но желательно всё писать правильно без преобразований.

module_data.post_fields = &(post_fields[0]);
→ Ссылка