C++gets_s()命令是什么?为什么gets编译出错,而前面程序运行了

Happy杰 2014-08-08 08:04:06
我想读入一个含有空白字符的字符串,想到gets函数是其中一种方式,但是我在visual studio2013中,用gets命令居然编译出错,然后看一下错误原因,说什么不妨考虑gets_s,让后我就换成了gets_s,居然编译通过,而且程序正常运行,这是怎么回事,我好像在网上查到有gets这个命令,可是没查到有gets_s这个命令的啊,哪位好心人能给与帮助!!关于程序本身我想没有什么问题,因为我的程序很简单,就几行,已有#include <iostream>; #include <string>;
...全文
9002 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-08-08
  • 打赏
  • 举报
回复
引用 7 楼 sunnyhappyjie 的回复:
谢谢给位了!好给力!还有,请问六楼的意思是??是想说字符型数组必须得以'\0'结尾吗??
用fgets代替gets,但fgets保留末尾的'\n',所以要用第二行的if去掉行尾的'\n’(如果有)
Happy杰 2014-08-08
  • 打赏
  • 举报
回复
谢谢给位了!好给力!还有,请问六楼的意思是??是想说字符型数组必须得以'\0'结尾吗??
赵4老师 2014-08-08
  • 打赏
  • 举报
回复
fgets(str9,size,stdin);
if ('\n'==str9[strlen(str9)-1]) str9[strlen(str9)-1]=0;
幻夢之葉 2014-08-08
  • 打赏
  • 举报
回复
后面很多加 _s的函数都是微软类库的函数,旨在替代相应的C函数,因为C函数很多情况下被VS认为是不安全的,一般微软多加了一个表示num的参数。 在其他版本下只是给出警告,一般需要跨平台的编程都不应该使用这些函数,VS2013没玩过。
Happy杰 2014-08-08
  • 打赏
  • 举报
回复
后面的注释,各位不要介意,我是初学者,然后就喜欢搞点注释,这个编译结果其实我还真不知道是错误还是警告,就知道是编译失败了!
Happy杰 2014-08-08
  • 打赏
  • 举报
回复
谢谢你的回答,我页比较纳闷,我的程序如下:(开头含有#include<iostream>)

但是就是编译错误,我还没有输入字符,怎么知道我的溢出了呢?
勤奋的小游侠 2014-08-08
  • 打赏
  • 举报
回复
不至于出错吧?是warning还是error?发编译信息上来看一下嘛。
乐哉悠哉 2014-08-08
  • 打赏
  • 举报
回复 2
gets_s()出现开始于C语言的C11标准,是原gets()的安全版本。gets()不进行数组范围检查,也就是说,你定义一个长度为n的数组,你可以使用gets()读入长度大于n的字符串,编译可能不会出错,但运行时就会出现数组越界或内存泄露的错误。而gets_s()需指明待读字符串的长度参数,防止数组越界。 但实际上,gets()并未被摒弃,如果程序无错,应该不会出现编译出错。

65,195

社区成员

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

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