int insert(char *s1, char *s2, int f)
{
char *cp, *tcp
tcp = s1 + strlen(s1)
cp = s1 + f
if(tcp < cp)
return -1
while(tcp >= cp)
{
*(tcp + strlen(s2)) = *tcp
tcp--
}
while(*s2 != '\0')
{
*cp = *s2
cp++
s2++
}
return 0
}
int main(void)
{
char str1[128]
char str2[128]
int f
gets(str1)
gets(str2)
scanf("%d", &f)
insert(str1, str2, f)
puts(str1)
return 0
}
是这个意思吗?
C语言实现,insert函数未对传入字符串进行边界检测,如果传入数组已满,函数会更改在内存连续的地址上的未知内容,故需保证传入数组未满。如果要在函数中处理需增设一个参数传入数组长度进行判断,以下是代码,包括测试的主函数部分:
#include <stdio.h>#include <string.h>
void insert(char *s1,char s2,char ch)
{
char *pos
char *insert_flag
for(pos=s1*pos!='\0'&&*pos!=chpos++) //在s1里寻找字符ch
if('\0'==*pos)
{
printf("未找到字符'%c'!\n",ch)
return
}
for(insert_flag=s1+strlen(s1)*insert_flag!=chinsert_flag--) //从s1指向字符串的结束符开始元素依次后移
{
*(insert_flag+1)=*insert_flag
}
*(insert_flag+1)=*insert_flag
*insert_flag = s2
}
void main()
{
char s[20]="hello,frind"//把20改为12则数组满
printf("插入前%s\n",s)
if(strlen(s)!=sizeof(s)-1)
{
insert(s,'e','n')
printf("插入后%s\n",s)
}
else printf("数组已满,拒绝插入!\n")
}
测试: