【发布时间】:2020-08-07 13:36:47
【问题描述】:
如果我使用块来重新分配内存,比如说,我使用 C 中的 getchar() 函数从控制台读取的每十个字符,并使用 counter++ 计算每个新字符(位置),当我完成单词 I '开着,如果我在数组的最后一个位置添加'\0'(由计数器标记),我会摆脱多余的分配空间吗?
例如,如果我想输入人的姓名和姓氏(新行表示我正在处理的字符串数组中的新字符串):
安娜·约翰逊
马克吐温
加布·迈克尔森
“Mark Twen”是 9 个字符,我在字符串的末尾再添加一个,我已经用完了分配块中的所有 10 个位置。但是“Gabe Michaelson”是 15 个字符,如果我在第 16 位添加 '\0'(从 1 开始计数;或第 15 位,从 0 开始计数),我会浪费(泄漏???)由 4 个剩余未使用位置表示的内存,或者字符串数组中的每个字符串是否都有自己的长度而没有任何泄漏/使用更多的内存然后需要?
【问题讨论】:
-
如果您只为所需的确切字符数分配存储空间 - 就不会浪费空间。为此,您需要分配指针,然后为需要存储的每个名称(
strlen(name) + 1字符)分配存储空间(单独的内存块)。然后,您将每个分配的存储名称的块的起始地址依次分配给每个指针。 (当您需要更多指针时,您只需realloc指针并继续前进)
标签: c arrays string char realloc