>假设我有一个十六进制字符串,我从一组字节中计算出适合我的特定格式:
std::string s("#00ffe1");
我不到签名到std::cout
std::cout << s;
//prints:
#00ffe1
虽然我喜欢cout的工作方式,但就我而言,它更容易使用fprintf
,因为这是输出一个格式化的字符串,而fprintf
更容易。
我去从fprintf
写相同的字符串:
fprintf(stdout,"foo=%s",s);
// outputs:
G* // (i.e., nonsense)
如何使用fprintf
输出此字符串?
std::string
是一个类,而不是一个"字符串",因为该术语在C中适用(fprintf
来自哪里)。 %s
格式说明符需要一个指向以 null 结尾的 char []
数组的指针。使用 std::string
方法c_str()
返回以 null 结尾的字符串,并将其传递给 fprintf
:
fprintf(..., s.c_str());
使用其 c_str()
成员函数将std::string
转换为以 null 结尾的const char*
:
fprintf(stdout,"foo=%s",s.c_str());
请注意,即使您使用 fprintf()
,这仍然是C++。C 不包含数据类型 std::string
。
fprintf
需要一个 C 样式的字符串,char*
。 std::string
有一个c_str()
方法,它只返回以下内容:
fprintf(stdout, "foo=%s", s.c_str());