标题:请教,关于使用 C 风格字符串中的 strcat()的问题。
只看楼主
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
看來樓主是死都不肯按照編譯器提示修改的了

授人以渔,不授人以鱼。
2014-05-24 22:07
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
以下是引用ClarenceC在2014-5-24 20:45:10的发言:

  谢谢您的提醒。但确实就是那个,无它。
我请别人用VC2012编译了一下你的代码,报
error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead
2014-05-26 14:58
ClarenceC
Rank: 2
等 级:论坛游民
帖 子:54
专家分:18
注 册:2014-1-10
得分:0 
回复 10 楼 一根牙签
谢谢
2014-05-26 16:20
ClarenceC
Rank: 2
等 级:论坛游民
帖 子:54
专家分:18
注 册:2014-1-10
得分:0 
回复 11 楼 TonyDeng
   OK   .


2014-05-26 16:30
ClarenceC
Rank: 2
等 级:论坛游民
帖 子:54
专家分:18
注 册:2014-1-10
得分:0 
回复 12 楼 rjsp
   全部了
2014-05-26 16:32
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
叫你用安全函數strcat_s()替代strcat()。你設置的VC默認開啓了警告作錯誤處理,可以改回來,忽略警告强行通過編譯,但不贊成。

授人以渔,不授人以鱼。
2014-05-26 20:35
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
以下是引用TonyDeng在2014-5-26 20:35:32的发言:

叫你用安全函數strcat_s()替代strcat()。你設置的VC默認開啓了警告作錯誤處理,可以改回來,忽略警告强行通過編譯,但不贊成。

在C/C++之前,软件设计中就有一个哲学:“如果一段代码有错误,让出错更大声一点”(记不太清原话了,只记得“更大声一点”),
C/C++亦行使此此哲学。

就拿题主的代码来说
char *p=new char[len+1];
strcat(p,cha1);//将cha1接到动态数组中
如果使用所谓安全的strcat_s函数,这个地方运行时不会出错,但这个数据是错误的。数据错误属于逻辑问题,悄悄的逃走后将更难被找到。
而如果用strcat,专业的代码检查工具能发现此处越界,即便是VC的Debug模式也能发现这个错误。

银行用char[]来保存储户的卡号,假如数组尺寸不足又用了strcpy_s,就会导致卡号前几位一样的储户共用了同一个帐号,提前实现了共产主义社会。

C/C++有提案说未来可能会增加一些安全函数(gets_s不算),但即便如此依然和VC的想法不一样。C/C++并不认为两者是替代关系。
也就是说,即使C/C++有了相似的函数,C/C++也不认为strcpy_s可以替代strcpy,而是该用strcpy的地方就不能用strcpy_s,可以用strcpy_s的那随便。
2014-05-27 09:45
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:0 
微软的那些安全函数好像进标准了 但很多编译器还没实现
2014-05-28 13:24
ClarenceC
Rank: 2
等 级:论坛游民
帖 子:54
专家分:18
注 册:2014-1-10
得分:0 
谢谢各位!
2014-05-28 22:35



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-431869-1-1.html




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

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