学校作业 - 请不要代码。伪代码好。
我们只允许使用3个libc函数:read
,malloc
和free
。但是,在学习过程中,我们已经实现并编写了许多我们自己的libc函数版本,以及我们 允许使用的那些版本。我会列出它们,但是大约有50个,所以我肯定会提到哪些不能
我的问题...在没有\n
的情况下,我必须采取哪些步骤从文件中读取一行并将该行存储为字符串?有人能够引导我完成整个过程吗?因为现在,我甚至不知道从哪里开始。我知道如何使用阅读,我会认为自己介于初学者和中级技能水平之间的C,但是在花了一整天搜索Google之后,每次询问同样的问题时,接受的答案总是涉及使用{{1}或fgets
,我们不允许使用,原因很明显。我已经实现了我自己的许多libc函数版本,这些函数可能对这个项目有所帮助,但显然不允许任何使这个项目变得简单快捷的东西。
再一次,请不要使用代码,虽然伪代码很好,但如果有人能帮助我更好地理解我需要的东西,我会更喜欢它,并告诉计算机'要做,从那里我可以自己编写代码。
答案 0 :(得分:4)
伪代码读取1行
buffer to 0, size to 0, size_used to 0
loop
read 1 character
no success? - break loop
size_used >= size
make buffer bigger (maybe 2x, at least 1)
[This involves allocating a new buffer, copy existing data, freeing old buffer]
add character to buffer
was character a \n? - break loop
Nothing read?
return NULL
right-size buffer to size_used+1
append \0
return buffer (calling code needs to eventual free it.)
可以提高效率。我建议从基本版本开始,获得正确的功能,然后考虑改进,例如
性能:从文件中读取,一次可能是4k字节。
性能:重新使用返回的缓冲区。
强健并检查分配失败。