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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
c语言面试题 指针30个常错题型
来源:http://blog.chinaunix.net/u1/58640/showart.php?id=1354073 记下来以备不时之需。 1. char * const p; char const * p const char *p 上述三个有什么区别? char * const p; //常量指针,p的值不可以修改 char const * p;//指向常量的指针,指向的
你需要知道关于C语言指针的一切
Everything you need to know about pointers in C 你需要知道关于C语言指针的一切 指针的定义 指针是内存地址。 (嗯,简短的段落。) 开始 假设你声明一个名为foo的变量。 int foo; 这个变量占用一些内存。 在当前主流的Intel处理器上,它占用四个字节的内存(因为int是四个字节
C语言指针 一个非常好的书籍
一本专门针对C语言指针的PDF,很深入的讲解了指针的含义及用法等。非常精华,嵌入式培训专用
void* 的指针运算错误
近日想实现一些基本的排序算法的代码,为了代码的通用性,对函数的输入参数采用void*的数组+元素大小+元素个数+比较函数 样式,如下: int ShellSort(void* array, size_t size, int count, int (*compare)(void*, void* ); { int i=0,j=0,k=0; int gap=count; void*
关于指针的15个经典面试题
指针是C语言的关键,也是C的难点,该文档详细列举了15个经典的指针面试题。
曾经进公司面试的C语言有关指针和数组的笔试题
原题如下: #include int main(void) { int i , j ; unsigned int Array_A[32]; unsigned int *pPointer; i = 0x0008 ; //测试i printf("i=%d\n",i) ; pPointer = Array_A ; *(pPointer++)=i++ ; //测试i pr
C语言 指针实验报告
有关指针的一道上机实验题,有源程序,可以详细了解指针的概念及相关应用
C语言-------------指针小程序的练习
1、猜数:首先生成一个介于1-100之间的整数,从键盘不断输入数值直到该数值与生成的那个数相符为止,并打印出猜数的次数#include #include void creat(int *secretp) { srand(time(NULL)); *secretp = rand() % 100 + 1; } void guess(int secret) { int cnt = 0,
C语言指针总结
指针是C语言中的难点,也是C语言中的精华所在,本文档列举了指针使用中的常见注意事项及易混淆知识点的对比,为C语言的初学者掌握指针提供了清晰的思路。
c语言指针使用小练习
#import void swap (int *a, int *b); void swap (int *a, int *b) { int temp; temp = *a;//通过改变指针指向得值来改变变量得数值 *a = *b; *b = temp; } int main(int argc, const char * argv[]) { //指