zoukankan      html  css  js  c++  java
  • C/C++ 0xC0000005: 写入位置 0xcccccccc 时发生访问冲突

      看下面的一段代码。复制字符串

    #include<stdio.h>
    void str_cpy( char *s,char *t)
    {
     while((*s=*t)!='\0')
     {
      s++;
      t++;
     }
     *s='\0';
    }
    void main()
    {
     char *a="I am a teachar.";
     char *b="you are a student.";
     str_cpy(a,b);
     printf("%s\n",a);
    }

     但是一运行就会报错,访问内存错误。为什么?

    因为:char *a="I am a teachar."; 字符串存储在常量区。只能读,不能写。

    怎么改呢?

    指针改成数组,如下:

     char  a[80]="I am a teachar.";

      改后,字符串存储在栈区。就可以改了,程序正常输出。

     

     再看下面一个简单例子:

    #include<stdio.h>
    #define MAX_NAME 5
    typedef char* VertexType; int main() { VertexType a; scanf("%s",a); printf("%s",a); }

    运行还是错误。应改为:

    typedef  char VertexType[MAX_NAME]; //数组类型

    或者先跟指针类型分配空间:

    typedef  char* VertexType;

    a=(VertexType)malloc(80);

    程序正确运行。

    注意数组不能写成:

    typedef  char[MAX_NAME]  VertexType; 是错误的,

    必须把维度写在名字后面。

     

  • 相关阅读:
    前端工程师须知pc电脑端分辨率
    移动前端的坑
    07.01工作笔记
    缓存
    word-wrap,white-space和text-overflow属性
    页面结构
    Spring Bean的作用域和自动装配
    Spring配置文件
    初识Spring和IOC理解
    MyBatis缓存
  • 原文地址:https://www.cnblogs.com/youxin/p/2520674.html
Copyright © 2011-2022 走看看