Проблема с выводом структуры
Я передаю структуру, которая содержит элемент указателя на другую структуру, но после передачи его в функцию 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 шт):
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]);