Передача указателя на структуру в качестве параметра функции - C (СИ)

Узнай цену своей работы

Формулировка задачи:

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

Решение задачи: «Передача указателя на структуру в качестве параметра функции»

textual
Листинг программы
  1. opt->domain = (char *)malloc(strlen(token)+1);
  2. strcpy(opt->domain, token);

Объяснение кода листинга программы

  1. opt - это указатель на структуру, которая содержит информацию о домене.
  2. domain - это поле структуры, которое содержит информацию о домене.
  3. token - это переменная, которая содержит строку, представляющую домен.
  4. malloc - это функция, которая выделяет память для хранения строки.
  5. strlen - это функция, которая вычисляет длину строки.
  6. strcpy - это функция, которая копирует строку из одного места в другое.
  7. В этом коде, opt->domain присваивается значение token.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.909 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы