Using %s format specifier with boost::format and std::string
Asked Answered
Q

1

7

I know that using the %s format specifier and std::string like this leads to undefined behaviour:

std::string myString = "test";
printf("%s", myString);

But is it save to use the same specifier and a std::string with 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 specifies a (const) char*, but I provide a std::string. Could this lead to UB too?

Quintonquintuple answered 20/5, 2012 at 8:37 Comment(2)
I may be missing the point, but why not pass std::string.c_str()?Melinamelinda
Because I found a lot of those calls in some legacy code, and I am trying to decide whether I need to fix it or not. Also I would like to know how to use the %s specifier correctly in the future.Quintonquintuple
P
9

It is safe to use %s with boost::format and std::string. In contrast to printf, the type character in the format string "does not impose the concerned arguments to be of a restricted set of types, but merely sets the flags that are associated with this type specification."

http://www.boost.org/doc/libs/1_49_0/libs/format/doc/format.html#printf_directives

Parsons answered 20/5, 2012 at 8:48 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.