Possible Duplicate:
newbie questions about malloc and sizeof
我正在尝试将字符串读入程序。当我注意到字符串有时会被损坏时,我尝试了以下代码:
void *mallocated = malloc(100);
printf("sizeof(mallocated) = %d\n", sizeof(mallocated));
根据我的程序,大小为mallocated
是8
,尽管我为其分配了 100 个字节。因此,每当我尝试存储超过 8 个字节的字符串时,第 8 个字节之后的所有内容有时都会消失。为什么会发生这种情况?我该如何预防?
最佳答案
因为“字符串”指针的大小是8个字节。以下是使用 sizeof()
及其适当“大小”的一些示例。对于不习惯使用术语 size_of()
的人来说,有时会产生欺骗。在您的例子中,指针的大小是 8 个字节。下面是典型 32 位系统上的表示。
sizeof (char) = 1
sizeof (double) = 8
sizeof (float) = 4
sizeof (int) = 4
sizeof (long) = 4
sizeof (long long) = 8
sizeof (short) = 2
sizeof (void *) = 4
sizeof (clock_t) = 4
sizeof (pid_t) = 4
sizeof (size_t) = 4
sizeof (ssize_t) = 4
sizeof (time_t) = 4
您遗漏了如何确定字符串正在消失(字符数组)。它可能被传递给一个函数,您需要将显式长度作为变量传递或在某个地方跟踪它。使用 sizeof()
不会告诉你这一点。
查看我的previous question对此,你会发现我什至缺乏初步的理解。
关于c - 在 malloc 内存上使用 sizeof(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44133571/