Кажется, я не понимаю, что именно здесь происходит
#include <stdio.h>
const char* mes(int a)
{
static char mess[100];
sprintf(mess, "%d", a);
return mess;
}
const int* hes(int a)
{
static int arr[100];
arr[0] = a;
return arr;
}
int main()
{
printf("%s %s\n", mes(55), mes(25)); //55 55
printf("%s\n", mes(55)); //55
printf("%s\n", mes(25)); //25
printf("%d %d\n", hes(55)[0], hes(25)[0]); //55 25
}
В первом printf вторая функция, кажется, игнорируется, и вывод более раннего ввода печатается снова.
Сначала я предположил, что это проблема статических переменных, поэтому я попытался распечатать их по отдельности, а затем они, кажется, работают нормально.
Затем я предположил, что это проблема printf, поэтому я попытался смоделировать то же поведение с целочисленным массивом, итам тоже все работало нормально.
Я пару раз запускал эту программу с различными входами, исключая возможность использования UB.
Итак, что именно мне здесь не хватает?
РЕДАКТИРОВАТЬ:Я столкнулся с этой проблемой где-то еще и не мог понять, что происходит.Таким образом, я воспроизвел проблему в коротком примере кода.Но мой вопрос стоит, (как многие уже упоминали) все параметры оцениваются перед печатью?Если это так, в обоих случаях должна быть перезапись (массив int и char) независимо от порядка вычисления.