2 myricardo myricardo 于 2016.04.13 16:40 提问

关于c语言的指针的编译错误
 #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);
}

在一个字符串插入另一个字符串 规定在第三个字符处插入 有错误 请问在什么地方错误了?

2个回答

qq423399099
qq423399099   Ds   Rxr 2016.04.13 17:21
已采纳

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';
}
CSDNXIAOD
CSDNXIAOD   2016.04.13 16:52

c语言常见编译错误
C语言,C++常见编译错误
常见c语言编译错误解析
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!