自定义字符串连接函数
strcat()字符串拼接函数是不安全的,在连接过程中对连接字符串的空间没有进行越界处理,下边实现字符串连接函数的功能,并对字符串连接函数做错误处理。
例1 catStr.c
1 #include <string.h>
2 #include <stdio.h>
3 char* catStr (char *dest,const char *src)
4 {
5 int count = -2;//预留字符串结束标志位‘\0’字符的空间,存储可用空间大小。
6 int lendest = strlen(dest);//目标字符串空间大小
7 int lensrc = strlen(src);//源字符串空间大小
8 char* s = dest;//指向目标字符串的指针
9 do//计算目标字符串总空间大小
10 {
11 count += 1;
12 } while (s[lendest++] == '\0');
13 if (count == 0)//目标字符换与存储的字符串空间大小相等
14 {
15 printf("空间不足!\n");
16 return dest;
17 }
18 else if (count>= lensrc)//目标字符串空间大于源字符长度
19 {
20 printf("空间充足!\n");
21 for (int i = 0; i < lensrc - 1; i++)
22 {
23 dest[strlen(dest)] = src[i];//从目标字符串的末尾进行连接
24 }
25 printf(dest);
26 return dest;
27 }
28 else//目标字符串有存储空间但是小于源字符串大小
29 {
30 printf("目标字符串可用空间小于字符串大小!\n");
31 for (int i = 0; i < count; i++)
32 {
33 dest[lendest] = src[i];
34 }
35 printf(dest);
36 return dest;
37 }
38 }
39 int main(void)
40 {
41 char str[5] = "1234";
42 char *str1= "abcd";
43 catStr (str,str1);
44 return 0;
45 }
例1程序运行结果如图1所示。
图1 例1运行结果
在例1中,第9~12行代码用于计算目标字符串dest的长度大小,并保存在变量count中,count的值在第5行定义时初始化为-2,作用是为了预留字符串结束标志位‘\0’,确保源字符串src连接到目标字符串时不会越界。第13~17行代码用于判断目标字符串dest没有存储源字符串src的空间,并在控制台提示连接空间不足;第18~26行代码用于比较目标字符串dest的可用空间大于源字符串src时可以进行正常连接,在控制台提示连接空间充足并打印目标字符串dest;第28~37行代码,目标字符串dest有可用空间但不能完全连接原字符串src,此时只能连接目标字符串可用空间大小的长度,然后在控制台提示目标字符串可用空间小于源字符串长度并打印目标字符串dest。