myricardo 2016-04-13 08:40 采纳率: 58.3%
浏览 1176
已采纳

关于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);
}

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

  • 写回答

1条回答 默认 最新

  • 小灸舞 2016-04-13 09: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';
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog