int main(){
char *ptr = (char*)malloc(10);
printf("%d",strlen(ptr));
}
Output is 11. i did not get why it is like that?
您尚未将任何数据写入 malloc'ed 块。它里面有旧字节,没有办法知道它包含什么。 strlen
只是寻找下一个零字节。我猜你在 11 字节之外找到了一个,但它可能在数千字节之外。
您正在查看未定义的行为。
您正在分配 10 个字节的内存来存储垃圾。请记住,strlen() 会一直读取直到\0
找到 a。
理想情况下,在分配一个新块后,您将执行:memset(ptr, 0, 10);
您的代码返回 11,但这只是巧合。一般来说,你会得到未定义的行为。
问题是在 C 字符串中是空终止的。这意味着 \0 字符表示字符串的结尾。
int main(){
char *ptr = (char*)malloc(11);
ptr[10]=0;
printf("%d",strlen(ptr));
}
这将返回一个值 <= 10。总是。
做这个:
int main(){
char *ptr = (char*)malloc(10);
memcpy(ptr,0,10);
printf("%d",strlen(ptr));
}