【问题标题】:C++, regarding fprintf and ofstreamC++,关于 fprintf 和 ofstream
【发布时间】:2013-08-15 23:17:12
【问题描述】:

我已经使用fprintf 有一段时间了,我想问一个问题。相当于这个fprintf 行:

fprintf(OutputFile, "%s", "SomeStringValue");

使用ofstream ?

如何使用ofstream 中的“%s”是我真正想知道的。如何获取下一个参数并将其打印为字符串?

【问题讨论】:

  • 类似于os << "SomeStringValue";,其中os 是正确打开的std::ofstream
  • 这真的与string的考虑删除该标签无关。
  • 当你真的需要依赖非平凡的 printf 风格的字符串时,你可以使用 snprintf 来构建字符串,然后将其输出到你的流中。
  • 实际上,当整个格式字符串为"%s" 或者更好的是fputs("SomeStringValue", OuputFile); 时,您应该使用fprintf(OutputFile, "SomeStringValue"); 而不是您的方法,因为这样可以避免解析格式说明符的字符串。跨度>
  • @DietmarKühl:混合 C 风格的 FILE 流和 C++ I/O 流能否保证提供一致的输出?

标签: c++ ofstream printf


【解决方案1】:

你不用它。

等价物本质上是:

std::ofstream x("your_file");
x << "SomeStringValue";
x.close();

在几个参考页面中的任何一个上阅读它。如http://www.cplusplus.com/reference/ostream/ostream/operator%3C%3C/

【讨论】:

    【解决方案2】:

    你不能。您只需将字符串写入流。

    如果你的意思是你想为字符串提供一些额外的格式(比如用空格填充右对齐),那么你可以使用 I/O 操纵器setfill(' ')(将填充字符设置为空格字符)和@ 987654323@(设置输出的宽度)。如果你想要一些模仿 C 风格格式字符串语法的东西,你可以使用Boost.format

    std::cout << boost::format("%s") % "SomeStringValue";
    

    【讨论】:

    • 这对我正在做的其他事情来说实际上很有趣而且非常有用,谢谢 jxh。
    猜你喜欢
    • 1970-01-01
    • 2020-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    • 2013-02-11
    相关资源
    最近更新 更多