相关文章推荐
乐观的针织衫  ·  C++ 打印变量地址 - ...·  15 小时前    · 
高大的滑板  ·  8.python ...·  10 月前    · 
活泼的针织衫  ·  matlab ...·  1 年前    · 
冷静的课本  ·  在 Power BI Desktop ...·  1 年前    · 
难过的春卷  ·  Nginx ...·  1 年前    · 

printf与流,不妨也比较一下两个的优缺点。
1. 先说printf的优点,也就这一点了,那就是代码简洁,格式化方便,可以在格式化字符串里一次性将输出格式化。而ostream则需要一段一段地拆分,显得比较烦锁,特别是自定义输出类型的格式时,如格式化输出浮点的小数位数、十六进制输出等,用ostream更烦锁。
2.ostream类型安全,而printf则不能保证类型安全。
2.1)printf容易产生输出格式字符串错误。
int i = –1;
std::cout<<i;
printf(“%u”, i):
使用printf的输出结果将是错误的,虽然“那谁”网友也说到GCC中对__attribute__的扩展,可以检测printf的格式化字符串,但对于%u仍然无可奈何,而且__attribute__移植性不好,其它的编译器不支持该特性。虽然一开始写的时候可以保证格式字符串的一致性,但谁能保证在一个大系统中,哪天unsigned变量不会被修改成signed,这样输出将不再正确。

2.2)printf类型错误时会造成程序崩溃。因为在64位主机上指针为8字节,而在32位系统中指针为4字节,如果使用格式符不当,会导致地址非法访问导致程序崩溃。而且,当printf提供的参数少于格式符时也会导致指针的非法访问,导致程序崩溃(GCC -Wall会给出警告)
2.3) printf与string混用容易出错。printf是C的API,如果使用%s直接输出string变量,将有可能导致程序崩溃(VC做了非标准的处理,可以正确输出)。
3.printf需要记很多格式字符,而使用ostream则不需要。
4.当printf后跟的参数很多时,很容易将参数的顺序搞错,而使用ostream则不容易出现这种情况。
5.使用sprintf等类似函数时需要自己处理缓冲区,处理不当容易产生缓冲区溢出,导致不可预知的错误。
6. 效率。效率应该差不多,虽然cout调用函数次数比较多,但它不用解析格式字符串,效率应该并不多。在VC2010上测试即差别比较大,printf约是cout效率的10位以上,而在Cygwin下使用gcc 4.3.4测试则相差不多,printf效率约为cout的1.2倍左右,看来应该是VC库的效率问题。

printf 函数是格式化输出函 ,数,一般用于向标准输出设备按规定格式输出信息。在C++中产生格式化输出的函数。其向终端输出字符。 printf 中的f的意思是format,它的作用是按照指定的格式输出数据。 printf 也是C++中很重要的一个函数,它能让用户可以与程序交流,是一个多才多艺的函数。 printf 将变量的内容输出到显示器上。 C++是一种面向对象的编程语言,它继承了C语言的特点,同时也增加了许多新的特性。在C++中的 cout printf 是两种常用的输出函数,它们都可以将数据显示在屏幕上,但是它们也有一些区别和优缺点。本文将详细说明这两种函数的区别及格式化输出的不同实现方法。 std:: cout &amp;amp;amp;lt;&amp;amp;amp;lt;”输出内容”std::endl; 其中&amp;amp;amp;lt;&amp;amp;amp;lt;操作符提取”输出内容”,然后进行重载,同时重载函数,根据”输出内容”的类型来重载不同类型的函数。 重载,简单说,就是函数或者方法有相同的名称,但是参 当需要输出浮点数时保留小数点后面几位数,以十六进制输出整数,输出整数时按几个数字的宽度输出,宽度不足时左边(默认)/右边补“0”,等等。C语言中的 printf () 函数使用以%);C++中的 cout 对象则使用格式控制符(流操作算子)或者成员函数进行控制。使用格式控制符(.c) CC++流操纵算子可以用来干什么?使用流操作算子关于SETW 1. printf printf 可以输出东西,但是它在一个叫做cstdio,导入cstdio包的方法是:#include<cstdio> 首先,我们要打一个#include<>。记住:括号是<>,不是()。我们在<>这里打一个你想要导入的包,例如:cstdio。所以是:include。接下来,要打主函数和停止程序语句: #include<cstdio> int main(){ return 0; **int main(){}就是主题函 cout 输出原理: 1、使用重载:根据输出内容的类型来重载不同类型的函数,所以可以输出包括自定义类型在内的多种类型。 举个例子——在 cout 中,相当于有很多 cout 的同名函数,但它们有不同类型的参数:如int float char等,当"输出内容"为char类型时,调用参数为char的 cout 函数 2、开辟缓冲区:定义每一个流对象时,系统会在内存中开辟一段缓冲区,用来暂存数据(系统内有多个缓冲区)。当收到endl时, cout 行会 话题:求C语言和C++大神解答, printf 怎么转成 cout 输出语句回答: cout 输出不需要指定输出的格式类型,其他的和 printf 一样的, endl 表示换行,当然 \n也还是可以用的. cout lt;lt; "\n" cout lt;lt; "Trim : "lt;lt; s.Trim() lt;lt; endl; cout lt;lt; "[3] : " lt;lt;s[3] lt;lt;...   void fn(){ printf (" %d",f);       // %d 和 f不匹配。 对于输出浮点型,应该用的是%f 但是这里用的是%d,这是没有类型匹配错误,非类型安全。                                 // 因为%d输出的是i