以下是引用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的那随便。