有人可以向我解释为什么我对字符串大小为 6 的 malloc 的调用会返回 4 个字节的 sizeof 吗?事实上,我给 malloc 的任何整数参数都会得到 4 的 sizeof。 接下来,我尝试复制两个字符串。为什么我复制的字符串的输出是(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);
}
最佳答案
sizeof(str)
返回 char*
类型指针的大小。你应该做的是 malloc
它本身的字符串大小:
char * copy = malloc(strlen(str) + 1);
此外,这些行:
while(*str != '\0'){
*copy = *str;
str++;
copy++;
}
copy = '\0';
可以很容易地用 C 重写,如下所示:
while(*copy++ = *str++);
关于c - 新手关于malloc和sizeof的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46351847/