#include<stdio.h>
#include<string.h>
void f(char *p1,char *p2)
{
int k=3;
char *p4,*p5;
p4=p1;
p5=p4+k-1;
for(;p1<p4+k-1;p1++);
for(;*p2!='\0';p2++)
{
*p1=*p2;
p1++;
}
for(;*p5!='\0';p5++)
{
*p1=*p5;
p1++;
}
*p1='\0';
}
main()
{
char str1[100],str2[100];
gets(str1);
gets(str2);
f(str1,str2);
puts(str1);
}
在一个字符串插入另一个字符串 规定在第三个字符处插入 有错误 请问在什么地方错误了?
f函数里p5=p4+k-1;这句有问题
p5虽然一开始确实指着p4从第三个字符开始的字符串,但是之后就把p2字符串的值一个个复制到p1上了,那么意味着原来的p1从第三个字符开始的字符串已经丢失了,并且有可能连\0都被覆盖了,所以最后的一个for循环极有可能越界,造成崩溃
应该改成下面这样,先把p1的第三个字符开始的字符串先保存起来
void f(char *p1,char *p2)
{
int k=3;
char *p4,*p5;
p4=p1;
char buff[100] = {0};
strcpy(buff, p4+k-1);
p5 = buff;
//p5=p4+k-1;
for(;p1<p4+k-1;p1++);
for(;*p2!='\0';p2++)
{
*p1=*p2;
p1++;
}
for(;*p5!='\0';p5++)
{
*p1=*p5;
p1++;
}
*p1='\0';
}