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';
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?