关于C++中的gets

蓝陨星骜 2019-08-06 10:45:24
在使用cin输入字符串时,遇到空格就结束。所以在输入英语句子时用gets。如gets(a),为什么a只能定义为字符数组?还有,用getline也能输入含空格的字符串,这几个到底怎么用啊?
...全文
407 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
蓝陨星骜 2019-08-06
  • 打赏
  • 举报
回复
👏👏感谢这位才高八斗的大佬。但不太详细。
双杯献酒 2019-08-06
  • 打赏
  • 举报
回复
由于gets不指定缓冲区的大小, 容易引起数据越界, 现在已经废除了
用 fgets(buf, count, stdin); 代替
蓝陨星骜 2019-08-06
  • 打赏
  • 举报
回复
好的,大致清晰了,谢谢这位大佬的鼎力,相助
Italink 2019-08-06
  • 打赏
  • 举报
回复
gets是C里面的函数,你也看到了在头文件<cstdio>,C里面有string类吗?都没有string类,为什么gets函数会有string的形参?
string是C++标准库里的东西,c++提供了自己的IO,cin,cout,
cin.getline( **** )可以读取一行,
当然最好直接用getline函数
蓝陨星骜 2019-08-06
  • 打赏
  • 举报
回复
感谢您的帮助。 这个我知道,而且调用gets要包含<cstdio>头文件。,,避免不能输入空格,不用cin,如用gets(a)为什么,要定义a为字符数组,而不是string?这几个该在什么时候使用?
Italink 2019-08-06
  • 打赏
  • 举报
回复
你是想读取一行字符到string里面吧
不能用gets是因为它的所有函数重载都没有以string为参数的形式,其实gets是一个C类型的函数,不属于C++标准库
如果你想通过输入一行string,需要用到C++标准库<string>中的getline函数
比如这样用

#include<string>
string str;
getline(cin,str); //第一个参数为输入流,第二个参数为操作的字符串,你可以通过VS的自动提示按键盘的↑↓查看所有重载形式

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧