Почему одни и те же результаты возвращаются двумя разными вызовами в моем коде c?

Если вы используете IIS (не экспресс), то простая остановка и начало работы выполнялись.

0
задан Michael96 25 March 2019 в 01:18
поделиться

2 ответа

Функции

в параметрах printf вызываются до самого printf. Поскольку оба вызова возвращают адрес в один и тот же буфер, последний вызов создает его содержимое. (нет определенного порядка, в котором вызываются функции в параметрах).

В результате вы вызываете printf с 3 аргументами, где последние 2 имеют одинаковый указатель на один и тот же буфер с одинаковым содержимым.

0
ответ дан Serge 25 March 2019 в 01:18
поделиться

getday возвращает адрес buf. Таким образом, printf получает один и тот же параметр дважды (адрес buf). buf содержит строку «Воскресенье» , когда printf оценивает его параметры, потому что выполняется первый getday(1) (в вашем случае компилятор сначала выбирает самый правый параметр), заполняя buf выполняется строка «Понедельник» , затем getday(0), заполняющая buf строкой «Воскресенье» , а затем printf использует данные по данному адресу (который это "воскресенье").

Чтобы это исправить, вы должны либо скопировать возвращаемое значение getday() в отдельные локальные буферы и передать их в printf, либо каждый раз возвращать разные адреса, например, возвращая адрес в массиве msg вместо buf, например, итак:

char *getday(int idx) {
    return msg[idx];
}
0
ответ дан Max Vollmer 25 March 2019 в 01:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: