Передача указателя на структуру в качестве параметра функции - C (СИ)
Формулировка задачи:
Здравствуйте. Прошу помощи в довольно простом (для знающих) вопросе.
Задумка такая: из функции main вызываю функцию чтения конфига. В качестве параметра указываю указатель на структуру, в которую будут записываться опции конфига.
Затем хочу иметь доступ к данным из этой структуры из main.
Вот примерный код:
common.h
main.c
configmanager.c
Не могу понять, что сделал не так. Указатель на структуру передается в функцию LoadConfig(). Там значение вписывается в поле структуры. И выводится на экран нормально. Но дальше, в функции main, после возврата из LoadConfig - уже не выводится. Пустое значение.
На C писал лет 10 назад последний раз. Помогите вспомнить. Неужели нужно и из функции LoadConfig() возвращать указатель на структуру? По-моему не должно быть так, я же не передаю саму структуру. Передается адрес на область памяти. Если в другой функции область памяти изменилась - то в main должны быть видны изменения.
Буду благодарен за подсказку, что не так.
#ifndef COMMON_H #define COMMON_H struct configoptions { char* domain; }; #endif
#include <stdio.h> #include <stdlib.h> #include "common.h" main (int argc, char *argv[]) { int status; struct configoptions opt; .................. status = LoadConfig(&opt); printf("Значение:\t%s\n\n", opt.domain); ................. exit(0); }
#include <stdio.h> #include <string.h> #include "common.h" int LoadConfig(struct configoptions* opt) { ......... token = "значение параметра из конфига"; opt->domain = token; printf("Значение:\t%s\n\n", opt->domain); ......... return 1; }
Решение задачи: «Передача указателя на структуру в качестве параметра функции»
textual
Листинг программы
opt->domain = (char *)malloc(strlen(token)+1); strcpy(opt->domain, token);
Объяснение кода листинга программы
opt
- это указатель на структуру, которая содержит информацию о домене.domain
- это поле структуры, которое содержит информацию о домене.token
- это переменная, которая содержит строку, представляющую домен.malloc
- это функция, которая выделяет память для хранения строки.strlen
- это функция, которая вычисляет длину строки.strcpy
- это функция, которая копирует строку из одного места в другое.- В этом коде,
opt->domain
присваивается значениеtoken
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д