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