Вы объявляете buf[]
в static
, что означает, что будет именно одна ячейка памяти всеми экземплярами.
get_a_day()
, кажется, неявным образом возвращают buf[]
, поэтому оба вызова на get_a_day()
возвращают указатель на тот же буфер.
Первый набор вызовов buf[]
- "Sunday"
и возвращает указатель на ячейку памяти buf
. Затем второй вызов устанавливает buf[]
по номеру "Monday"
, переписывая "Sunday"
и возвращает указатель на ячейку памяти buf
- та же ячейка памяти, что и первый звонок. Затем указатель на buf
передается как 2-й и 3-й аргументы в printf
. С buf
содержит "Monday"
(ранее переписанный "Sunday"
), printf()
отпечатки Monday Monday
.
Почему buf
должен быть статическим? Если вы удалите это ключевое слово и правильно распределите свою память, все должно работать так, как вы надеялись. Кроме того, вам нужно buf
? Если вы только что вернули msg[i]
, вы получите ожидаемый результат.
Еще одна вещь: вы не должны неявно возвращать такое значение. Ремонтопригодность существенно снижается, и цель кода не ясна. Вы должны явно указать значение, которое вы хотите вернуть.
Что происходит, если вы используете отдельные вызовы 'printf'? – AJMansfield
жаль, что я забыл написать «возврат» в последнем редактировании ... моя ошибка –