gpt4 book ai didi

c - 在 malloc 内存上使用 sizeof()

转载 作者:行者123 更新时间:2023-11-30 16:45:20 25 4
gpt4 key购买 nike

Possible Duplicate:
newbie questions about malloc and sizeof

我正在尝试将字符串读入程序。当我注意到字符串有时会被损坏时,我尝试了以下代码:

 void *mallocated = malloc(100);
printf("sizeof(mallocated) = %d\n", sizeof(mallocated));

根据我的程序,大小为mallocated8 ,尽管我为其分配了 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

Source

您遗漏了如何确定字符串正在消失(字符数组)。它可能被传递给一个函数,您需要将显式长度作为变量传递或在某个地方跟踪它。使用 sizeof() 不会告诉你这一点。

查看我的previous question对此,你会发现我什至缺乏初步的理解。

关于c - 在 malloc 内存上使用 sizeof(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44133571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com