问题描述
- 关于c语言的指针的编译错误
-
#include<stdio.h>#include<string.h>void f(char *p1char *p2){int k=3;char *p4*p5;p4=p1;p5=p4+k-1;for(;p1<p4+k-1;p1++);for(;*p2!='';p2++){ *p1=*p2; p1++;}for(;*p5!='';p5++){ *p1=*p5; p1++;}*p1='';}main(){char str1[100]str2[100];gets(str1);gets(str2);f(str1str2);puts(str1);}
在一个字符串插入另一个字符串 规定在第三个字符处插入 有错误 请问在什么地方错误了?
解决方案
f函数里p5=p4+k-1;这句有问题
p5虽然一开始确实指着p4从第三个字符开始的字符串,但是之后就把p2字符串的值一个个复制到p1上了,那么意味着原来的p1从第三个字符开始的字符串已经丢失了,并且有可能连都被覆盖了,所以最后的一个for循环极有可能越界,造成崩溃
应该改成下面这样,先把p1的第三个字符开始的字符串先保存起来
void f(char *p1char *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!='';p2++) { *p1=*p2; p1++; } for(;*p5!='';p5++) { *p1=*p5; p1++; } *p1='';}
解决方案二:
c语言常见编译错误
C语言,C++常见编译错误
常见c语言编译错误解析
时间: 2024-08-29 04:02:57