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

时间:2019-01-31 22:23:13

标签: c printf

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

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

3 个答案:

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