int main(){
char *ptr = (char*)malloc(10);
printf("%d",strlen(ptr));
}
输出是11.我不知道为什么会这样?
答案 0 :(得分:7)
您尚未向malloc的块写入任何数据。它有旧的字节,没有办法知道它包含什么。 strlen
只是查找下一个零字节。我猜你找到了一个11个字节,但它可能已经有几千个字节了。
您正在查看未定义的行为。
答案 1 :(得分:0)
您正在分配可能存储垃圾的10个字节的内存。请记住,strlen()读取直到找到\0
。
理想情况下,在分配新块后,您将执行:memset(ptr, 0, 10);
答案 2 :(得分:0)
您的代码返回11,但只是巧合。通常,您会得到未定义的行为。
问题是在C string中 null终止。这意味着\ 0字符表示字符串的结尾。
int main(){
char *ptr = (char*)malloc(11);
ptr[10]=0;
printf("%d",strlen(ptr));
}
这将返回一个值< = 10. Always。
答案 3 :(得分:0)
这样做:
int main(){
char *ptr = (char*)malloc(10);
memcpy(ptr,0,10);
printf("%d",strlen(ptr));
}