Передача указателя на структуру в качестве параметра функции - 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.