getday
возвращает адрес buf
.Таким образом, printf
получает один и тот же параметр дважды (адрес buf
).buf
содержит строку "Воскресенье" , когда printf
оценивает его параметры, потому что сначала выполняется getday(1)
(в вашем случае компилятор сначала выбирает самый правый параметр), заполняя buf
строка «Понедельник» , затем getday(0)
выполняется, заполняя buf
строкой «Воскресенье» , а затем printf
использует данные по данному адресу (которыйis "Sunday").
Чтобы исправить это, вы должны либо скопировать возвращаемое значение getday()
в отдельные локальные буферы и передать их в printf
, либо каждый раз возвращать разные адреса, например, возвращаяадрес в массиве msg
вместо buf
, например, так:
char *getday(int idx) {
return msg[idx];
}