我是一个 C 新手,我来自 C#。我一直在学习内存管理和 malloc()
函数。我也遇到过这段代码:
char *a_persons_name = malloc(sizeof(char) + 2);
我不明白这是为 a_persons_name
分配了多少空间。是分配 2 个字符(例如 AB)还是其他?
我也知道您有时可以通过 malloc
获得“幸运”并使用未分配的空间(这可能导致数据损坏和段错误)。那么我如何知道我分配了多少空间以及我需要多少空间?
最佳答案
该代码段为 2 个字符的名称分配了足够的空间。
通常,字符串缓冲区将从某个地方填充,即 I/O。如果事先不知道字符串的大小(例如从文件或键盘读取),通常使用以下三种方法之一:
为任何给定的字符串定义最大大小,分配该大小 + 1(对于空终止符),最多读取该数量的字符,如果提供的字符过多则出错或盲目截断。不是非常用户友好。
分阶段重新分配(最好使用几何级数,例如加倍,以避免二次行为),并继续阅读直到到达终点。编码不是很容易。
分配一个固定的大小并希望它不会被超过,并且当这个假设失败时可怕地崩溃(或被拥有)。易于编码,易于破解。例如,请参阅标准 C 库中的
gets
。 (切勿使用此功能。)
关于c - 你怎么知道用 malloc() 分配多少空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1247964/