Это выглядит как ошибка:
char * value1, value2; /* value1 is a char*, value2 is a char */
strcpy(value1, get_value_by_key(key1));
strcpy(value2, get_value_by_key(key2));
Вы копируете данные в value1
и value2
, но у вас нет выделенной памяти для строк - только указатель и символ. ПРИМЕЧАНИЕ: только value1
является char*
, а value2
является одним char
. Если вы хотите объявить оба char*
, вам нужно написать:
char *value1, *value2;
Приведенный ниже код должен работать без сбоев (при условии, что get_value_by_key () возвращает char*
), но я не знаю, как вы хотите выделить место. В стеке, куче или в статической оперативной памяти?
char value1[128], value2[128];
strcpy(value1, get_value_by_key(key1));
strcpy(value2, get_value_by_key(key2));
EDIT:
(отредактировано после новой информации в комментариях)
Пожалуйста, отправьте код для get_value_by_key
.
Бьюсь об заклад, он использует статический буфер для хранения строки / char-массива, на который он возвращает указатель. Это будет означать, что содержимое будет уничтожено после второго вызова, и это может стать проблемой.
EDIT2:
Если это действительно реальный источник, то вы возвращаете указатель на что-то, выделенное в стеке - строго вербено !!
См. возврат локальной переменной из функции в C