使用 strlen 函数时出现意外输出

unexpected output while using strlen function

#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 个字节的内存,我希望大小的输出为 10,但输出为

the address of pointer is 0x123e010 and size of the string  is 0

为什么大小是 0 而不是 10

strlen 只是计算值不是 0x00 的字节数(也称为 NULL,C 标准将其用于字符串终止符)。

由于calloc分配内存后初始化为0x00strlen returns 0 因为第一个字节已经是NULL.