printf()是C标准库里用来输出的,原型为int printf(const char *format,...)。
printf()处理字符串时,假定为char*类型(即简单的字节串),范例:
#include
int main(void) {
char *str = "Hello, World!";
printf("%s\n", str); // 输出: Hello, World!
return 0;
}
C++中的string类结构很复杂,不同于C中简单的字符串(以'\0'结尾)。
string s4(n, 'c');
printf("%s",s4);
printf("%s", s4); 这句将s4作为参数传给printf(),实际上将维护s4这个string对象的数据作为参数传给了printf(),而string对象的数据结构不是简单的C字符串(顺序排列的字符数组并以'\0'结尾),但是printf()仍把它当作简单的C字符串处理,将这些数据逐字节打印,直到'\0'。
cout是有缓冲输出:
cout < < "abc " <
flush立即强迫缓冲输出。
printf是无缓冲输出。有输出时立即输出。
cout和printf混合使用时,cout后立即强迫缓冲输出就可以了。
根据出错信息 s4 是一个对象,而不是字符串,不能用printf 输出。
cout 使用的是流输出,所以可以把string对象输出来。
更细节的我就不清楚了。
printf("%s",s4.c_str());