fgetc():读取和存储未知长度的字符串

hel*_*hod 3 c

我需要做的任务是:

  • 打开一个文件(使用fopen())
  • 读取学生的名字(使用fgetc())
  • 将该名称存储在结构的某个部分中

我遇到的问题是我需要读取一个任意长的字符串到名称,我不知道如何存储该字符串而不浪费内存(或写入未分配的内存).

编辑

我的第一个想法是分配一个1字节(字符)内存块,然后调用realloc()如果需要更多字节,但这似乎不是很有效.或者,如果数组已满,我可以将数组加倍,然后在最后将字符复制到一个具有确切大小的新内存块中.

Mat*_*att 5

不要担心浪费100或1000字节,这可能对所有名称都足够长.我可能只是将你正在阅读的缓冲区放入堆栈中.

不要担心写在缓冲区的末尾.即缓冲区溢出.程序防止这种情况!

当你来到的名字存储到您的结构,你可以malloc的一个缓冲区存储的名称,你需要(不要忘记为空终止添加一个额外的字节)的确切长度.

但如果你真的必须存储任何长度的名字,那么你可以用realloc来做.即分配一个大小为50字节的malloc的缓冲区.

然后当你需要更多空间时,使用realloc来增加它的长度.增加块长度的说50个字节,并跟踪与一个int它有多大,让你知道,当你需要再次成长吧.在某些时候,您将不得不决定缓冲区的长度,因为它无法无限增长.