为了账号安全,请及时绑定邮箱和手机立即绑定

关于C语言g++ -Wall编译后的警告。。。。

关于C语言g++ -Wall编译后的警告。。。。

asdhjhg 2017-05-21 15:47:23
//string reversal using stack //#include <iostream> //#include <stdlib.h> #include <stdio.h> #include <stack> #include <cstring> using namespace std; void Reverse(char *C,int n) { stack <char> S; //loop for push for (int i = 0; i<n; i++) { S.push(C[i]); } //loop for pop for (int j = 0; j<n; j++) { C[j] = S.top();//overwrite the character at index i S.pop(); } } int main() { char C[51]; printf ("Enter a string : "); gets(C); Reverse(C,strlen(C)); printf ("Output = %s",C); printf ("\n"); }这几个警告是怎么回事?大神们帮我解析一下啊。。。。。还有就是代码是不是有问题,Reverse的两个for循环并列关系,应该是同步执行吧,如果是同步执行,那么第二个for循环就错了呀。。。。我感觉有点蒙
查看完整描述

3 回答

已采纳
?
onemoo

TA贡献883条经验 获得超454个赞

这几个都是警告 gets 函数不安全、不建议使用了。

这个函数不判断缓冲区大小,实际使用很容易造成溢出。你自己做小练习用用也无所谓。

查看完整回答
反对 回复 2017-05-21
  • asdhjhg
    asdhjhg
    嗯嗯,明白了,而且好像有C版本不支持的原因,在stackoverflower上看到有人说版本问题的
  • onemoo
    onemoo
    恩,这个 gets 函数在 C++11 标准中被标记为 deprecated 了,并且在 C++14 中移除了。就是因为它太不安全了...
?
onemoo

TA贡献883条经验 获得超454个赞

啊,之前没注意到你问了两个问题。

这两个 for 循环不是同步执行的啊。第一个 for 执行完,再执行第二个 for 的。

第一个 for 中循环进行压栈,第二个 for 中取栈顶元素后再弹栈。

你为什么会觉得是并列关系呢? 因为它们的 intent 一样??

查看完整回答
1 反对 回复 2017-05-23
  • 3 回答
  • 0 关注
  • 2507 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信