Это классика!
Функция возвращает указатель на внутреннюю переменную (буфер).Таким образом, в основном ваши данные находятся в той части памяти (стеке), где последовательный вызов других функций будет перезаписывать их.
В этом случае, когда вы вызываете одну и ту же функцию дважды, положение переменных равноточно так же.Итак, память, в которую записано nameA
, перезаписывается с помощью nameB
и следующим вызовом.
веселее: создайте функцию
const char *intermediate(void) {
char buffer[MAX_BUFFER];
return conReadLine();
}
при первом вызове conReadLine ивторой промежуточный.Дополнительный вызов функции и локальная переменная «сместят» область памяти, поэтому она больше не будет перезаписывать ее!
Два решения:
1) вместо хранения данных в статической определеннойбуфер, получить некоторую память из кучи, используя malloc
(не забывайте free
, когда это больше не нужно).
2) после первого вызова, скопируйте содержимое буфера в другое место так,Вы можете сделать их непригодными, когда вам это нужно.
Добро пожаловать в мир указателей C!