安全地操作 C 字符串

C语言中的strcpy()和strcat()等函数在处理字符串时可能导致内存覆盖等安全问题。文章介绍了如何通过检查字符串长度,防止使用可能导致故障的函数,以增强软件安全性。 SecString_strchk()和SecString_strnlen()等函数的使用能有效检测和避免不安全的字符串操作。
摘要由CSDN通过智能技术生成

由于字符串无效而导致的软件故障在任何软件系统中都很常见,但在用 C 语言编写的嵌入式软件中却很关键,因为它经常通过string.h 中定义的特定函数来操作字符串,例如strcpy()或strcat(),这根本不安全。本文提出了一种简单的机制来防止软件使用这些众所周知的函数来操作无效字符串。在这种情况下,无效字符串是指没有空字符“\0”来标记结尾的字符序列。

strcpy()或strcat() 之类的函数能够在软件系统上导致致命故障,例如无意的内存覆盖,当其参数中的至少一个(预计为字符串)未正确终止时。一般来说,当软件崩溃时,很难找到这种故障的原因,因为它不会立即表现出来。

让我们假设以下代码片段,其中 frame 是一个 12 个字符的数组,str是一个指向char的指针。str的长度应小于 4 个字符,不包括终止空字符本身。此代码调用strcat()将从Geo_getLatitude()检索的str附加到框架。

字符框架[12],*str;
... 
str = Geo_getLatitude(位置);
框架 = strcat (框架,str);

在执行函数strcat() 之前,frame 包含字符串“@078,”。

</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值