• 有关C语言指针访问问题


      C语言指针访问问题今天有了一些理解。

      char *p;

      char *q;

      char k[10000];

    我之前一直以为他们两个一样用,因为之前看到说k也是一个地址,我忽略了后面的一句话,k是连续的一段地址,而p的使用需要malloc这点我忽略了。今天访问时候p[10]一直报错,我很不解,怎么回事呢,然后用strcat(p,q)也是不行。

    我进行了百度,在使用strcat函数时候,会把p结尾的''去掉,然后把q的值接上去,而且p所指的范围一定要够大,能够容纳p+q的容量。如果p是char *声明的话,只是声明了一个地址,并没有分配内存,访问的话,谁知道访问到哪里去了呢?

    最可笑的是我char *a="hahaha";  char *k; k=a; 多么低级的错误,当局者迷,现在才深刻认识到我的笨蛋。

    所以在strcpy的时候,并不知道p分配内存的大小,所以必然报错嘛!

     

    还有在“函数返回局部变量 ”这个问题上。

    我是这么写的:

    char *

    haha(char *a,char *b){

      char p[100];

      ...

      ...

      return p;

    }

    我是这么写的,然后编译器给我来了段警告,“函数返回局部变量的地址”然后我百度了一下。

    发现了这篇文章,我已经把这篇文章转到了我的博客上。http://blog.csdn.net/haiwil/article/details/6691854/

    函数不能通过返回指向栈内存的指针(注意这里指的是栈,返回指向堆内存的指针是可以的)。

    char *

    haha(){

      char *p="ssssss";

      return p;

    }  这是可以的,这个没有任何问题,因为"ssssss"是一个字符串常量,存放在只读数据段,把该字符串常量存放的只读数据段的首地址赋值给了指针,所以returnStr函数退出时,该该字符串常量所在内存不会被回收,故能够通过指针顺利无误的访问。

     

    char *

    haha(){

      char p[100]="ssssss";

      return p;

    }"ssssss"是局部变量存放在栈中。当returnStr函数退出时,栈要清空,局部变量的内存也被清空了,所以这时的函数返回的是一个已被释放的内存地址,所以有可能打印出来的是乱码。

     

    我只是着重说了有关我今天遇到的问题,关于这个“函数返回局部变量”的问题,更多内容请参阅我的上一篇博文,或者访问我贴出来的地址进行学习。今天就这样吧。

  • 相关阅读:
    FastAPI(38)- 模拟一个跨域场景
    FastAPI(37)- Middleware 中间件
    Python
    Python
    FastAPI(35)- 依赖项中使用 yield + Context Manager 上下文管理器
    汇编 | CPU物理地址本质理解
    汇编 | DosBox初步接触的一些初始化设置(窗口大小 & 默认命令)
    汇编语言 第3版 王爽 检测点答案及详细解析 (更新中)
    JSP | Tomcat目录结构详解
    JSP常见错误以及解决方案
  • 原文地址:https://www.cnblogs.com/symons1992/p/3353075.html
Copyright © 2020-2023  润新知