使用malloc分配内存并找到strlen()

时间:2012-02-17 18:45:54

标签: c pointers malloc strlen

int main(){
    char *ptr = (char*)malloc(10);
    printf("%d",strlen(ptr));
}

输出是11.我不知道为什么会这样?

4 个答案:

答案 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)); 
}