как победить sprintf ?
Ляжет то что было подставлено в аргументе.
-----
Разумеется - именно то, что, по факту, прописано в параметрах.
Ожидаемое, однако, есть указатель на начало нуль-терминальной строки в сегменте данных.
в стеке лежат какието числа, которые могут быть чем угодно
-----
Ээээ... там лежат "числа", которые ты можешь интерпретировать как тебе нужно. Для спецификатора
'%s'
ты должен ожидать "указатель-на-строку" (в сегменте данных).
Если данные не соответствуют ожидаемым, т.е. имеется "указатель-в-другой-сегмент", то с его можно
интерпретировать как
void*
и кастить к нужному типу. Ну или смотреть что по факту компилятор туда складывает.
То. что у тебя может быть набор параметров никак не соответствующий заданному формату - это понятно, но в Сях с эллипсисом оно таково изначально и не решаемо средствами Сей.
Рекомендация относится к случаю когда параметр на месте, но не соответствует нужному типу - отследить и пофиксить в ран-тайме.
или телом любого объекта любого типа
-----
Тебе сложно скастить к ссылке на объект с инициированием адресом в стеке?