//使用的字符串函数介绍:
// strlen(计算字符串长度), strcat(接字符串连接到另一字符串末尾)
// strncat(将字符串前n个字符连接到另一字符串末尾)strchr(在字符串中查找一个字符)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *insert(char *s1, char *s2)
{
int len1 = strlen(s1)
int len2 = strlen(s2)
char *s3 = (char *)malloc((len1 + len2 + 1)*sizeof(char))//+1是为了多申请一个字节来保存字符串末尾的'\0'
memset(s3, '\0', len1 + len2 +1) //将字符串设为全是'\0'
char *p = strchr(s1, *s2) //查找s2首字符是否在s1中?
if (p != NULL) //在s1中
{
int pos = p - s1 //计算s2开头字符在s1中的位置
strncat(s3, s1, pos) //s1前pos个字符接到s3末尾
strcat(s3, s2) //把s2接到s3末尾
strcat(s3, s1 + pos) //把s1中剩下的部分接到s3末尾
}
else //不在s2中
{
strcat(s3, s1) //把s1接到s3末尾
strcat(s3, s2) //把s2接到s3末尾
}
return s3
}
void main()
{
char *s1 = "abcddefgh"
char *s2 = "d45"
char *s3 = insert(s1, s2)
printf("s1: %s\n", s1)
printf("s2: %s\n", s2)
printf("s3: %s\n\n", s3)
}
子函数中的a是有生存时间的,当子函数结束时,那么a的生命周期也结束了,所以chaeck中的a是带入不到main中去的再说了,子函数的参数,是实参的影子,不在一个内存空间中,改变了子函数的形参,是无法影响实参的
其实判断是否是1,不需要用子函数。把while循环放到main中即可