#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char *p;
p=calloc(10,sizeof(char));
printf("the address of pointer is %p and size of the string is %d",p,strlen(p));
return 0;
}
我使用calloc在堆中分配了10个字节的内存,我希望size的输出为10,但输出为
the address of pointer is 0x123e010 and size of the string is 0
为什么大小为0而不是10
答案 0 :(得分:1)
strlen
只计算其值不是0x00
的字节数(也称为NULL
,C标准用于字符串终结符。)
由于calloc
在分配后将内存初始化为0x00
,strlen
会返回0,因为第一个字节已经是NULL
。