有人可以向我解释为什么我对字符串大小为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贡献1836条经验 获得超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
- 3 回答
- 0 关注
- 571 浏览
添加回答
举报
0/150
提交
取消