我需要做的任务是:
我遇到的问题是我需要读取一个任意长的字符串到名称,我不知道如何存储该字符串而不浪费内存(或写入未分配的内存).
编辑
我的第一个想法是分配一个1字节(字符)内存块,然后调用realloc()如果需要更多字节,但这似乎不是很有效.或者,如果数组已满,我可以将数组加倍,然后在最后将字符复制到一个具有确切大小的新内存块中.
不要担心浪费100或1000字节,这可能对所有名称都足够长.我可能只是将你正在阅读的缓冲区放入堆栈中.
不要担心写在缓冲区的末尾.即缓冲区溢出.程序防止这种情况!
当你来到的名字存储到您的结构,你可以malloc的一个缓冲区存储的名称,你需要(不要忘记为空终止添加一个额外的字节)的确切长度.
但如果你真的必须存储任何长度的名字,那么你可以用realloc来做.即分配一个大小为50字节的malloc的缓冲区.
然后当你需要更多空间时,使用realloc来增加它的长度.增加块长度的说50个字节,并跟踪与一个int它有多大,让你知道,当你需要再次成长吧.在某些时候,您将不得不决定缓冲区的长度,因为它无法无限增长.