Передача указателя на структуру в качестве параметра функции - 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д