Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何向iostream发送格式字符串?_C++_Iostream_Format String - Fatal编程技术网

C++ 如何向iostream发送格式字符串?

C++ 如何向iostream发送格式字符串?,c++,iostream,format-string,C++,Iostream,Format String,可能重复: 我可以使用一个像Prtrf那样的格式字符串来使用C++ IOString类吗?p> 基本上,我希望能够做到以下几点: snprintf (inchars, len, "%4f %6.2f %3d \n", float1, float2, int1); 轻松使用stringstreams。有没有一个简单的方法可以做到这一点 是的,有(内部为stringstreams) #包括 #包括 int main(){ Std::CUT> P>这种格式需要使用标准的C++流来做更多的努力。特

可能重复:

我可以使用一个像Prtrf那样的格式字符串来使用C++ IOString类吗?p> 基本上,我希望能够做到以下几点:

snprintf (inchars, len, "%4f %6.2f %3d \n", float1, float2, int1);
轻松使用stringstreams。有没有一个简单的方法可以做到这一点

是的,有(内部为stringstreams)

#包括
#包括
int main(){

Std::CUT> P>这种格式需要使用标准的C++流来做更多的努力。特别是,你必须使用它来指定小数点后显示的数字的数量。

< P>你可以编写一个包装函数,它返回一些可以传递到OSTRIGHEW流中的东西。 该功能结合了MooEEEP中提出的一些解决方案,并在评论中指出:

std::string string_format(const char *fmt, ...) {
    std::vector<char> str(100);
    va_list ap;
    while (1) {
        va_start(ap, fmt);
        int n = vsnprintf(&str[0], str.size(), fmt, ap);
        va_end(ap);
        if (n > -1 && n < str.size()) {
            str.resize(n);
            return &str[0];
        }
        str.resize(str.size() * 2);
    }
}
std::字符串格式(const char*fmt,…){
std::载体str(100);
va_列表ap;
而(1){
va_启动(ap、fmt);
int n=vsnprintf(&str[0],str.size(),fmt,ap);
va_端(ap);
如果(n>-1&&n标准C++格式更冗长,很遗憾。你会想要一个库。哇,多么可怕的语法……看起来它会起作用……虽然我会坚持一段时间,希望能用更干净的语法来解决更好的问题。你习惯了……但是,很少有这样的情况,你会因为操作符优先而麻烦。
%
的使用可能是受Pythonice启发的。这里有一个链接可以使用:我刚刚发现了这种方法的一个缺点:当你传入一个与提供的参数不匹配的格式字符串时,你会得到一些非特定的错误,从打印垃圾到分段错误。boost::format提供了一个有用的错误改为r消息。请参见:@moooeeep:GCC提供了一个扩展属性,该属性将警告与printf参数不匹配的参数(
\uuuuu-attribute\uuuu((格式(…)))
)。
std::string string_format(const char *fmt, ...) {
    std::vector<char> str(100);
    va_list ap;
    while (1) {
        va_start(ap, fmt);
        int n = vsnprintf(&str[0], str.size(), fmt, ap);
        va_end(ap);
        if (n > -1 && n < str.size()) {
            str.resize(n);
            return &str[0];
        }
        str.resize(str.size() * 2);
    }
}