我一直在讨论如何在C ++中实现这一目标:
string format = "what is your %s";
new_string = sprintf(buffer, format, name);
非常感谢任何帮助。
谢谢!
答案 0 :(得分:4)
使用format.c_str()
:
string format = "what is your %s";
int total = sprintf(buffer, format.c_str(), name);
另请注意,返回的值不是新字符串,而是 buffer ,它是输出字符串。返回的值实际上是写入的字符总数。此计数不包括自动附加在字符串末尾的附加空字符。失败时,会返回一个负数(see doc here)。
但是在C ++中,std::ostringstream
更好,类型安全,正如@Joachim在他的回答中解释的那样。
答案 1 :(得分:3)
std::ostringstream os;
os << "what is your " << name;
std::string new_string = os.str();
答案 2 :(得分:2)
您可以随时执行以下操作:
char buffer[100];
string format = "what is your %s";
sprintf(buffer, format.c_str(), name.c_str());
string new_string(buffer);
或者,使用stringstream
:
stringstream buf;
buf << "what is your " << name;
string new_string = buf.str();
答案 3 :(得分:1)
传递给sprintf
的格式必须是char*
,而不是std::string
。
sprintf
也返回写入的字符数,而不是指向构造缓冲区的指针。
int len = sprintf(buffer, "what is your%s", name);
std::string new_string(buffer, len);
另一种可能性是使用std::ostringstream
来执行格式化。
答案 4 :(得分:0)
我不确定我是否理解这里的问题 - sprintf
是一个函数,它将char*
作为其第一个参数,而const char*
作为其第二个参数。这些都是C数据类型,因此我不知道使用C ++字符串是否会被编译器识别为有效。
此外,该函数返回一个int(写入的字符数),而不是一个字符串,它看起来像你期望的返回值,如new_string
。
有关详细信息,请查看http://www.cplusplus.com/reference/clibrary/cstdio/sprintf/
答案 5 :(得分:-1)
您可以使用stringstream
形成更多OO的C ++ STL。
sprintf
是C库的一部分,因此对std :: string一无所知。如果您仍想使用它,请使用char *。
要从char*
获取C std::string
字符串,请使用c_str方法。