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

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

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

Здравствуйте. Прошу помощи в довольно простом (для знающих) вопросе. Задумка такая: из функции main вызываю функцию чтения конфига. В качестве параметра указываю указатель на структуру, в которую будут записываться опции конфига. Затем хочу иметь доступ к данным из этой структуры из main. Вот примерный код: common.h
#ifndef COMMON_H
#define COMMON_H
struct configoptions {
 
  char* domain;
};
#endif
main.c
#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);
}
configmanager.c
#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;
}
Не могу понять, что сделал не так. Указатель на структуру передается в функцию LoadConfig(). Там значение вписывается в поле структуры. И выводится на экран нормально. Но дальше, в функции main, после возврата из LoadConfig - уже не выводится. Пустое значение. На C писал лет 10 назад последний раз. Помогите вспомнить. Неужели нужно и из функции LoadConfig() возвращать указатель на структуру? По-моему не должно быть так, я же не передаю саму структуру. Передается адрес на область памяти. Если в другой функции область памяти изменилась - то в main должны быть видны изменения. Буду благодарен за подсказку, что не так.

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

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

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

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

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


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

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

11   голосов , оценка 3.909 из 5
Похожие ответы