关于char *p = "";的思考
来源:互联网 发布:mac 设置成代理服务器 编辑:程序博客网 时间:2024/05/17 03:57
偶然记起在浏览别人的代码的时候发现有一处指针的初始化时这样写的:
char *p = "";
首先我们知道char *p = NULL;的意思是将p初始化为NULL(和'\0', 0)的意思一样,防止使用野指针p。不过char *p = "";又是什么意思呢?
main.c测试如下:
char *p = "";
printf("+++++++0x%08x\n", p);
printf("+++++++0x%08x\n", &p);
printf("+++++++%d\n", strlen(p));
printf("+++++++%d\n", *p);
printf("+++++++%d\n", sizeof(""));
printf("+++++++0x%08x, %d\n", "", *(""));
printf("String=[%s]\n","adsasdasdasd""------");
printf("String=[%s]\n","adsasdasdasd""""++++++");
*p = 'a';
打印如下:
+++++++0x0804872f
+++++++0xbfbaf93c
+++++++0
+++++++0
+++++++1
+++++++0x0804872f, 0
String=[adsasdasdasd------]
String=[adsasdasdasd++++++]
Segmentation fault (core dumped)
总结下:
1. 系统为""分配了长度为1的内存空间,并且填充转义字符'\0'(即0)。
2. sizeof计算""的内存空间的时候不是当做地址(指针)计算为4个字节,而是计算整个字符串常量的内存空间大小(包括自动填充的'\0')。
3. 和普通的字符串常量一样,所有修改该空间上的内存的操作都是非法的。
注意: char a = ''; // error: empty character constant
- 关于char *p = "";的思考
- char *p与char p[N]的一点思考
- 关于char (*p)[] 和char p[]的问题
- 关于char (*p)[] 和char p[]的问题(转)
- 关于char (*p)[] 和char p[]的问题
- 关于指针char *p和数组char p[] 的区别
- 关于:char (*p)[10] 、char p[10]和char *p[10]的讨论
- 关于const char *p 、char const*p 、char *const p 的区别
- 关于:char (*p)[10] 、char p[10]和char *p[10]的讨论
- 关于 static const char* P="jiashikun"的一些问题
- 关于 int *p = NULL; char *p = NULL; 的问题:
- 关于char *p和char p[]
- 关于char (*p)[] 和char p[]的问题(转)(2006-12-26 21:56)
- char* p与char p[]的不同
- char *p 与 char p[]的区别
- char *p和char p[]的问题
- char *p和 char p[]的区别
- char *p和 char p[]的区别?
- 初接触mysql出现的问题
- UESTC 994两个圆的公共面积
- 最简单的 RabbitMQ 监控方法
- liunx自动备份数据库mongodb与mysql
- 【Bzoj3884】上帝与集合的正确用法
- 关于char *p = "";的思考
- 机器学习中的算法(2)-支持向量机(SVM)基础
- 图形
- java并发原理
- 深入JDK源码之Hashtable
- arcgis10.2安装中localhost不是有效的主机名
- 三星要用Exynos 9芯片打造独立VR头显
- 人人都要学一点深度学习(1)- 为什么我们需要它
- 论文笔记之---Joint Detection and Identification Feature Learning for Person Search