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

0 0
原创粉丝点击