| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 473 人关注过本帖
标题:运算符重载问题
只看楼主 加入收藏
lam888888908
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2011-11-14
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:2 
运算符重载问题
61   // concatenate right operand to this object and store in this object
62   const String &String::operator+=( const String &right )
63   {
64      size_t newLength = length + right.length; // new length
65      char *tempPtr = new char[ newLength + 1 ]; // create memory
66
67      strcpy( tempPtr, sPtr ); // copy sPtr这里
68      strcpy( tempPtr + length, right.sPtr ); // copy right.sPtr这里
69
70      delete [] sPtr; // reclaim old space
71      sPtr = tempPtr; // assign new array to sPtr
72      length = newLength; // assign new length to length
73      return *this; // enables cascaded calls
74   } // end function operator+=
编译时提示:warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
67行我改成:strcpy_s( tempPtr,newLength+1, sPtr )通过了
68行我不会改,请高手看下!
搜索更多相关主题的帖子: create store 
2012-01-29 09:54
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:20 
我建议你不要理睬这个微软的警告,因为这个警告很傻屄
如果strcpy是不安全的,可能溢出,则strcpy_s同样也是不安全的,也可能溢出
如果用户使用strcpy_s时考虑到溢出而安全,同样用户在使用strcpy时考虑到溢出而一样安全
如果溢出,strcpy在运行时出错,strcpy_s则不。即后者会深深的隐藏住这个bug,从而带来数据错误等更为严重的后果
另外strcpy_s等微软特有的垃圾是非标准的

如果想屏蔽掉这个傻逼警告,进引入strcpy的头文件之前加上 #define _CRT_SECURE_NO_WARNINGS

如果你一定要用strcpy_s
strcpy( tempPtr, length+1, sPtr );
strcpy( tempPtr+length, right.length+1, right.sPtr );
2012-01-29 11:18
lam888888908
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2011-11-14
收藏
得分:0 
谢了
2012-01-29 12:45
快速回复:运算符重载问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024806 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved