fprintf:打印文字十六进制字符串



>假设我有一个十六进制字符串,我从一组字节中计算出适合我的特定格式:

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());

最新更新