Редактировать: Как насчет того, если бы у нас было
char value_arr[8];
// value_arr is set to some value
snprintf(value_arr, 8, "%d", *value_arr);
это поведение определено?
Скажем по какой-то неуклюжей причине, что у меня
char value_arr[8];
// value_arr is set to some value
int* value_i = reinterpret_cast<int*>(value_arr);
snprintf(value_arr, 8, "%d", *value_i); // the behaviour in question
Есть ли гарантия, что, например, если *value_i
= 7, то value_arr
примет значение "7".Это поведение определено?Таким образом, value_i
сначала разыменовывается, затем передается по значению, а затем форматируется, а затем сохраняется в массиве.
Обычно можно ожидать, что значение *value_i
не изменится, но сохранит строку вvalue_arr
нарушает это.
Кажется, он работает, как и ожидалось, когда я тестирую его, но я не могу найти окончательного ответа в документации.Сигнатура функции имеет ...
, что, насколько мне известно, имеет отношение к va_list
, но, боюсь, я не очень разбираюсь в работе функций с переменными числами.
int sprintf (char* str, const char* format, ... );