Verwenden des %s-Formatbezeichners mit boost::format und std::string
-
12-12-2019 - |
Frage
Ich weiß, dass mit dem %s
formatbezeichner und std::string
so führt dies zu undefiniertem Verhalten:
std::string myString = "test";
printf("%s", myString);
Aber ist es sicher, denselben Spezifizierer und a zu verwenden std::string
mit boost::format
?
#include <boost/format.hpp>
int main()
{
std::string myString = "test";
boost::format fmt("%s");
fmt % myString;
std::cout << fmt.str();
return 0;
}
%s
gibt ein (const) an char*
, aber ich stelle eine zur Verfügung std::string
.Könnte das auch zu UB führen?
Lösung
Es ist sicher zu bedienen %s
mit boost::format
und std::string
.Im Gegensatz zu printf
, das Typzeichen in der Formatzeichenfolge "erzwingt nicht, dass die betreffenden Argumente einer eingeschränkten Menge von Typen angehören, sondern setzt lediglich die Flags, die dieser Typspezifikation zugeordnet sind."
http://www.boost.org/doc/libs/1_49_0/libs/format/doc/format.html#printf_directives
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow