作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我需要为作业做的是:
我遇到的问题是我需要将任意长字符串读入名称,我不知道如何在不浪费内存(或写入未分配内存)的情况下存储该字符串。
编辑
我的第一个想法是分配一个 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/
我是一名优秀的程序员,十分优秀!