我是一个完全的 C 新手,我来自 C#。我一直在学习内存管理和malloc()
功能。我也遇到过这段代码:
char *a_persons_name = malloc(sizeof(char) + 2);
我不明白这是分配了多少空间a_persons_name
。是分配 2 个字符(例如 AB)还是其他字符?
我也知道有时你会“幸运”malloc
并使用未分配的空间(这可能导致数据损坏和段错误)。那么我如何知道我分配了多少空间以及我需要多少空间?
该片段为 2 个字符的名称分配了足够的空间。
一般来说,字符串缓冲区将从某个地方填充,即 I/O。如果提前未知字符串的大小(例如从文件或键盘读取),通常使用以下三种方法之一:
定义任何给定字符串的最大大小,分配该大小 + 1(对于空终止符),最多读取那么多字符,如果提供太多字符,则出错或盲目截断。用户不太友好。
分阶段重新分配(最好使用几何级数,例如加倍,以避免二次行为),并继续阅读直到到达末尾。编码并不容易。
分配一个固定的大小并希望它不会被超过,并且当这个假设失败时会严重崩溃(或被拥有)。易于编码,易于破解。例如,参见gets
在标准C 库中。 (切勿使用此功能。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)