关于malloc和sizeof的新手问题

有人可以向我解释为什么我对字符串大小为6的malloc的调用返回4个字节的sizeof吗?实际上,我给malloc的任何整数参数都将得到sizeof4。接下来,我试图复制两个字符串。为什么我的输出是复制的字符串(NULL)?以下是我的代码:


int main()

{

    char * str = "string";

    char * copy = malloc(sizeof(str) + 1);

    printf("bytes allocated for copy: %d\n", sizeof(copy));

    while(*str != '\0'){

        *copy = *str;

        str++;

        copy++;

    }

    copy = '\0';

    printf("%s\n", copy);

}


繁星淼淼
浏览 507回答 3
3回答

忽然笑

sizeof()返回变量实际类型的大小。因此,当您将类型定义为char *时,它将返回指针的大小。但是,如果您将变量设置为数组,则sizeof将返回数组本身的大小,这将实现您想要执行的操作:char *ptr = "moo to you";char arr[] = "moo to you";assert(sizeof(ptr) == 4);   // assuming 32 bitassert(sizeof(arr) == 11);  // sizeof array includes terminating NULassert(strlen(arr) == 10);  // strlen does not include terminating NUL
打开App,查看更多内容
随时随地看视频慕课网APP