c语言编程 用指针编写函数:insert(s1,s2,f),其功能是在字符串s1中的指定位置f处插入字符串s2

Python011

c语言编程 用指针编写函数:insert(s1,s2,f),其功能是在字符串s1中的指定位置f处插入字符串s2,第1张

#include<stdio.h>

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")

}

测试: