gpt4 book ai didi

c - fgetc() : Reading and storing a string of unknown length

转载 作者:太空狗 更新时间:2023-10-29 15:56:15 28 4
gpt4 key购买 nike

我需要为作业做的是:

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

我遇到的问题是我需要将任意长字符串读入名称,我不知道如何在不浪费内存(或写入未分配内存)的情况下存储该字符串。

编辑

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

最佳答案

不要担心浪费 100 或 1000 个字节,这对于所有名称来说可能足够长。我可能只是将您正在读取的缓冲区放在堆栈上。

不要担心写满缓冲区的末尾。即缓冲区溢出。防止这种情况发生的计划!

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

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

然后当你需要更多空间时,使用 realloc 来增加它的长度。以 block 为单位增加长度,比如 50 字节,并用一个 int 来跟踪它有多大,这样你就知道什么时候需要再次增加它。在某些时候,您将不得不决定缓冲区的长度,因为它不能无限增长。

关于c - fgetc() : Reading and storing a string of unknown length,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4250250/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com