一、有关printf输出string字符串类型的问题
1.printf函数输出字符串是针对char *的,即printf只能输出c语言的内置数据,而string不是c语言的内置数据。
2.string类型的对象不止包含字符串,还包含了许多用于操作的函数,所以&str并非字符串的首地址。
3.如需输出string对象中的字符串,可以使用string的成员函数c_str(),该函数返回字符串的首字符的地址。
4.正确格式:(注意头文件为#include<string>)
string s = “hahaha”;
printf(“%s” , s.c_str());//string中c_str()成员方法返回当前字符串的首字符地址
以上参考自:① https://blog.csdn.net/zhanshen112/article/details/84719344
② https://blog.csdn.net/linghugoolge/article/details/82595277
③ https://blog.csdn.net/li_l_il/article/details/84196587
5. c中的printf和c++中的cout完成的功能一样,都是输出
书写格式不一样
1. 格式不同int a=6; cout<<a<<endl; printf("%d\n",a)
2.printf需要你告诉它格式(int %d, double %f,char %c)
cout不需要
另外
1.printf是函数。cout是ostream对象,和<<配合使用。
2.printf是变参函数,没有类型检查,不安全。cout是通过运算符重载实现的,安全。
3.如果printf碰到不认识的类型就没办法了,而cout可以自己重载进行扩展。
4.有时候printf比cout灵活。
c++中也能使用printf,但是c中不能使用cout
也可以这么说:c++可以完全兼容c的用法,反过来就不行
注:参考例子:PAT B1002 写出这个数 (20 分) https://blog.csdn.net/weixin_44312186/article/details/88742661
二、简单地说说 fgets() 和 gets()
1、首先看看函数原型:
char* fgets(char *s, int n, FILE *stream);
char* gets(char *s);
一般使用fgets函数,都是读取文件当中的n-1个字符到s中,其实,此函数还有一个很好的用处就是从标准输入流中读取字符串,而且不用担心输入的字符个数超出了字符数组的大小而导致溢出的问题!要怎样做呢?如下:
char str[10];
fgets(str, siezof(str), stdin);
而如果使用gets函数的话,就不能保证上述的问题不会出现(输入的字符个数超出了字符数组的大小而导致溢出) 不信你可以运行下面的代码:
char str[10];
gets(str);
当然你得输入10个以上的字符才能看到问题
到这里,fgets()的好处就不用再详细说了。值得注意的是:谨记fgets()只读取n-1个字符。所以,fgets()读取到换行符、文件尾或读完n-1个字符便会进行返回
2、另需参考 https://blog.csdn.net/CrazyOnes/article/details/81562139
以及(PAT B1002 写出这个数 ) https://blog.csdn.net/weixin_44312186/article/details/88742661