由于字符串无效而导致的软件故障在任何软件系统中都很常见,但在用 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,”。
</