关于c语言的指针的编译错误

问题描述

关于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

关于c语言的指针的编译错误的相关文章

mp3-c语言 函数指针编译出错

问题描述 c语言 函数指针编译出错 #ifndef LIBAO_H #define LIBAO_H typedef enum{wav,wim,mp3} io_type_t; typedef struct IOINFO{ io_type_t type; //文件类型编号 char *name; //wav wim,mp3等 char *author; //作者 char *time; //编写时间 char *describe; //模块描述 } io_info_t; typedef struct

c 指针-C语言 结构体指针字符 二进制文件写入和读取 指针字符输出错误

问题描述 C语言 结构体指针字符 二进制文件写入和读取 指针字符输出错误 typedef struct s{ char *name; }student; /*将结构体读出并显示*/ int IsUsed(char str) { FILE *fp = fopen("test","rb"); student s; s.name = (char) malloc(sizeof(char)*20); fread(&s,sizeof(student),1,fp); wh

c语言简单问题,就是编译错误,求解答

问题描述 c语言简单问题,就是编译错误,求解答 void myframe(void) { POINT_COLOR=GRAYBLUE; unsigned char i; for(i=0;i<5;i++) { LCD_DrawRectangle(i, i, 240-i, 320-i); } } 错误提示: main.c(20): error: #268: declaration may not appear after executable statement in block 求解答啊,在线等 解

C语言打开一个电脑中的文件,文件指针显示是错误的指针,这是为什么

问题描述 C语言打开一个电脑中的文件,文件指针显示是错误的指针,这是为什么 FILE *fp1: printf("请输入要打开的文件的位置:"); gets(file1); if((fp1=fopen(file1,"r"))==NULL) { printf("Can't open this file!n"); exit(0); } 对话框中显示为 请输入要打开的文件的位置:D:a.docx 此时逐语句调试时,局部变量fp1的值显示为+ fp1 0

template-c++模板类包含typedef 指针函数,vs2012编译错误

问题描述 c++模板类包含typedef 指针函数,vs2012编译错误 #include "stdafx.h" #include<stdexcept> #ifndef ToozyBinaryTreeHead #define ToozyBinaryTreeHead template <class T> class ToozyBinaryTree{ public: typedef bool (*findFunc)(typename const ToozyBinar

顺序查找c语言-在devc++环境下,编译错误,请帮忙查找问题

问题描述 在devc++环境下,编译错误,请帮忙查找问题 #include #include int search(int a[10],int x) { int j; for(j=0;j<10;j++) { if(a[j]==x) return j++; else continue; } return 0; } main() { int a[10]; int i; int target,b; for(i=0;i<10;i++) scanf("%d",&a[i]);

基于C++中常见编译错误的总结详解_C 语言

在日常编码过程中会遇见各种编译错误,本文对常见的编译错误进行分析总结.(基本的编译错误在这里不列举,后续后持续更新) 1.error c101008a解决方法该错误出现在项目升级过程中会出现,比如说项目从vs2008升级到vs2010.解决办法:在项目上点右键,清理(Clean),重新编译,问题解决 2.error C2252解决方法该错误主要在项目从vs2008升级到vs2010出先.error C2252: an explicit instantiation of a template ca

解析C语言与C++的编译模型_C 语言

首先简要介绍一下C的编译模型:限于当时的硬件条件,C编译器不能够在内存里一次性地装载所有程序代码,而需要将代码分为多个源文件,并且分别编译.并且由于内存限制,编译器本身也不能太大,因此需要分为多个可执行文件,进行分阶段的编译.在早期一共包括7个可执行文件:cc(调用其它可执行文件),cpp(预处理器),c0(生成中间文件),c1(生成汇编文件),c2(优化,可选),as(汇编器,生成目标文件),ld(链接器).1. 隐式函数声明为了在减少内存使用的情况下实现分离编译,C语言还支持"隐式函数声明&

C语言 字符串指针详解及示例代码_C 语言

C语言中没有特定的字符串类型,我们通常是将字符串放在一个字符数组中,这在<C语言字符数组和字符串>中已经进行了详细讲解,这里不妨再来演示一下: #include <stdio.h> int main(){ char str[] = "http://c.biancheng.net"; int len = strlen(str), i; //直接输出字符串 printf("%s\n", str); //每次输出一个字符 for(i=0; i<