c++ fprintf:打印十六进制字符串

eqqqjvef  于 2023-01-28  发布在  其他
关注(0)|答案(3)|浏览(253)

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

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输出这个字符串?

dw1jzc5e

dw1jzc5e1#

std::string是一个类,而不是C中使用的“字符串”(fprintf的来源)。%s说明符需要一个指向char []的空终止数组的指针。使用std::string方法c_str()返回空终止字符串,并将 that 传递给fprintf

fprintf(..., s.c_str());
tf7tbtn2

tf7tbtn22#

你需要使用c_str()成员函数将std::string转换为一个以空值结尾的const char*

fprintf(stdout,"foo=%s",s.c_str());

注意,即使使用fprintf(),这仍然是C++。C不包含数据类型std::string

56lgkhnf

56lgkhnf3#

fprintf需要一个C样式的字符串char*std::string有一个c_str()方法,该方法返回以下内容:

fprintf(stdout, "foo=%s", s.c_str());

相关问题