真正的原因:因为这些所谓“不安全”的函数是全平台广泛通用的。那些带_s的函数太商业化、带有铜臭。
先不谈各种嵌入式什么的,咱就说最常见的Intel CPU的电脑。
如果你装Windows系统,那么就有strcpy_s可用;如果你装Linux(包括win10/win11的Linux子系统)或苹果Mac OS系统,那么哪来的什么strcpy_s给你用?这边的安全版本函数是strlcpy。然而Windows又不给你用strlcpy函数。
其实,带_s的函数是微软自创的,它只在Windows环境有效,别的平台没法用。C11标准的Bound-Checking Interfaces向微软妥协,才在附录收了这些函数。
另一些微软自创的东西,比如“写void main、不用写return 0”,C标准不接受void main的写法,要求一定得是int main,但是也妥协为“main函数不写return 0则返回0”。
如果你用strcpy前,自己写代码判断源串有多长、目标有多大,难吗?
如果用scanf的%s、%c前,自己判断目标大小,难吗?
易如反掌。
所以哪有什么安全不安全?分明是商业化的借口而已。
因为你用的甚至都不是C语言的编译器,而是某个商业公司的C++编译器。
去拿个正规的C语言编译器编译一下试试吧,gcc还是clang都都行。然后你就没有疑问了。
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有