为什么char*的指针变量,通过strlen(&p)计算出的数是随机值

  • Post author:
  • Post category:其他


如有不正确或者个人看法意见等欢迎发言

我们先来看代码:

#include<stdio.h>
int main() {

	char* p = "abcdef";

	printf("%d\n",strlen(&p));//随机值3
	printf("%p\n", p);//00937BD8

}


随机值3怎么来的呢?


【如果p指针变量中有\0,打印

必然小于4



为什么?

可以看到,其中p代表a的地址,对char*p进行&,那就是取出存放a地址的变量的地址

那么strlen访问&p,

此时&p指向它存放的内容

(a的地址00937BD8),以字节为单位读解,因为我这里是小端存储;

所以从右向左读取,1字节D8 2字节7B 3字节93 最后遇到00==\0,停止



共读取了3个字节为单位的长度

,于是打印3,如果没有\0(00),打印的随机值就会大于p地址的大小



版权声明:本文为weixin_58791060原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。