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 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿