指针赋值
来源:互联网 发布:怎么修改手机的mac地址 编辑:程序博客网 时间:2024/06/05 23:08
int main(){char *ptr=NULL;get_str(ptr);if(ptr)printf("%s",ptr);elseprintf("%p\n",ptr);return 0;}void get_str(char *p){p=(char*)malloc(1+sizeof("testing"));strcpy(p,"testing");}
函数的问题在于,函数接收的参数p,并不是最终能够获得字符串的p。
传递的指针类型的参数,是用来改变其指向内容的,而指针本身的值不会改变。
所以在这个函数中,给p分配的内存,使p指向这段内存的首地址,但调用者传入的p这个参数本身并没有改变,如果原来是NULL,那么函数调用返回后,这个p还是NULL,会出现访问异常.
第一种办法: 要先给p分配好内存,再调用函数。在函数中不能进行内存分配操作。
#include <stdio.h>#include <string.h>void get_str(char *p){ strcpy(p,"testing");}void main(){ char *p; p = (char *)malloc(256); get_str(p); printf("the string: %s \n",p);}
第二种办法: 还有就是函数将分配的地址返回出来,在函数中分配内存,供调用者使用。
#include <stdio.h>#include <string.h>char* get_str(){ char * p; p = (char *)malloc(sizeof("testing")); strcpy(p,"testing"); return p;}void main(){ char *p; p = get_str(); printf("the string: %s \n",p);}
第三种办法: 就是将函数指针的指针传入函数,在函数中分配内存。
#include <stdio.h>#include <string.h>void get_str(char **p){ *p = (char *)malloc(sizeof("testing")); strcpy(*p,"testing");}void main(){ char *p; get_str(&p); printf("the string: %s \n",p);}
0 0
- 指针赋值
- 指针赋值
- 指针赋值
- 指针赋值与指针传递
- 指针初始化 赋值 void*指针
- 指针的赋值问题
- 字符指针赋值
- c++ 指针赋值
- 指针的赋值
- 指针变量赋值
- 指针赋值的问题
- 函数指针赋值
- 指针数组赋值问题
- 空指针赋值分区
- 给二维指针赋值
- 指针赋值的问题
- 指针的错误赋值
- 空指针赋值分区
- FLV视频封装格式详解
- 环境篇-03:Android开发环境
- Cordova 环境搭建(PhoneGap前身)
- Linux Oracle服务启动&停止脚本与开机自启动
- 记一次网页数据抓取经历——杭电ACM离线题库制作
- 指针赋值
- 简述动态存储分配及malloc(),free()函数(针对linux)
- [ jQuery ] jquery 闭包浅析!
- c# POST和GET方式通过服务器地址提交数据
- 剑指offer24--二叉树的后序遍历
- Oracle BI Mobile App Designer第一次支持是在 BIEE 11.1.1.7.131017
- 织梦仿站系列教程第十七讲——通用底部的制作
- 高斯模糊-Gaussian blur
- hdu 5073 Galaxy(数学+前缀和)