3 #include4 char *find(char *str,char *flag) //此函数形参分别接受被寻找字符串的首地址和帧头或帧尾字符串首地址
5 {
6 int s = strlen(str);//得出被寻找字符串的总长度
7 int h = strlen(flag);//得出帧头或帧尾字符串的长度
8 int i;
9 for(i = 0; i < strlen(str); i++)//这里可以稍微优化一下'i < strlen(str) - strlen(flag) + 1'不过无伤大雅。。。
10 {
11 if(strncmp(str + i,flag,strlen(flag)) == 0)//调用了strncmp函数,其中后两个实参传入的是帧头或帧尾首地址和其长度,至于'str+i'就是寻找功能了,str是字符串首地址,每次加一直到找到相同字符串(结合strncmp函数的作用)
12 {
13 return str + i;//返回值就是帧在字符串中的地址
14 }
15 }
16 }
17 int main()
18 {
19 char *str;//字符串
20 str = (char *)malloc(sizeof(char) * 128);//申请了128字节空间,malloc返回了空间首地址,并被str接收了,下同;
21 char *head;//帧头
22 head = (char *)malloc(sizeof(char) * 8);
23 char *tail;//帧尾
24 tail = (char *)malloc(sizeof(char) * 8);
25 printf("请输入一串字符串(最大128位),帧头(最大8位),帧尾(最大8位)\n");
26 scanf("%s%s%s",str,head,tail);
27 char *h = find(str,head);//先找帧头
28 if(NULL == h)//如果没找可以提示用户,下同
29 {
30 printf("没有找到帧头!\n");
31 }
32 char *t = find(str,tail);//再找帧尾
33 if(NULL == t)
34 {
35 printf("没有找到帧尾!\n");
36 }
37 // *(t + strlen(tail)) = '\0';//如果要将帧头和帧尾以及其中的字符串都输出要这么写,自然下面一行的代码就需要被删除或注释掉
38 *t = '\0';//如果只要两帧之间的字符串,只需将帧尾首地址所指字符赋值为‘\0’即可
39 printf("找到的字符串如下:\n");
40 printf("%s\n",h + strlen(head));//这里没有包含帧头,如果要包含就需要将‘strlen(head)’去掉
41 }