假设我有一个根据一组字节计算出的十六进制字符串,采用适合我的特定格式:
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
输出此字符串?
答案 0 :(得分:5)
std::string
是一个类,而不是“字符串”,因为该术语在C语言中适用(fprintf
来源于此)。 %s
格式说明符需要一个指向char []
的空终止数组的指针。使用std::string
方法c_str()
返回以null结尾的字符串,并将 that 传递给fprintf
:
fprintf(..., s.c_str());
答案 1 :(得分:3)
您必须使用其std::string
成员函数将const char*
转换为以空值结尾的c_str()
:
fprintf(stdout,"foo=%s",s.c_str());
请注意,即使您使用fprintf()
,它仍然是C ++。 C不包含数据类型std::string
。
答案 2 :(得分:1)
fprintf
需要C样式的字符串char*
。 std::string
有一个c_str()
方法,该方法只返回以下内容:
fprintf(stdout, "foo=%s", s.c_str());