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?

War es hilfreich?

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
scroll top