为了账号安全,请及时绑定邮箱和手机立即绑定

关于malloc和sizeof的新手问题

关于malloc和sizeof的新手问题

C
繁星淼淼 2019-12-05 16:13:53
有人可以向我解释为什么我对字符串大小为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);}
查看完整描述

3 回答

?
忽然笑

TA贡献1806条经验 获得超5个赞

sizeof()返回变量实际类型的大小。因此,当您将类型定义为char *时,它将返回指针的大小。


但是,如果您将变量设置为数组,则sizeof将返回数组本身的大小,这将实现您想要执行的操作:


char *ptr = "moo to you";

char arr[] = "moo to you";


assert(sizeof(ptr) == 4);   // assuming 32 bit

assert(sizeof(arr) == 11);  // sizeof array includes terminating NUL

assert(strlen(arr) == 10);  // strlen does not include terminating NUL


查看完整回答
反对 回复 2019-12-05
  • 3 回答
  • 0 关注
  • 505 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信