Функции типа Variadic, такие как sprintf()
, не являются строго безопасными для типов, так как любой тип аргумента принимается (во время компиляции) как часть набора аргументов с переменными параметрами.
Как показали другие ответы, "%s"
- это спецификатор формата, который ожидает завершенную NULL
символьную строку. Передача std :: string в этом случае, вероятно, не определена.
Если он работает в режиме отладки, то, скорее всего, просто «повезло», поскольку реализация выдает правильный результат (вероятно, вытекающий из преобразования в стиле c объекта std :: string в символьный указатель).