C - 一次从文件1行读取而不使用fgets / getline

时间:2017-05-05 22:05:30

标签: c file c99

学校作业 - 请不要代码。伪代码好。

我们只允许使用3个libc函数:readmallocfree。但是,在学习过程中,我们已经实现并编写了许多我们自己的libc函数版本,以及我们 允许使用的那些版本。我会列出它们,但是大约有50个,所以我肯定会提到哪些不能

我的问题...在没有\n的情况下,我必须采取哪些步骤从文件中读取一行并将该行存储为字符串?有人能够引导我完成整个过程吗?因为现在,我甚至不知道从哪里开始。我知道如何使用阅读,我会认为自己介于初学者和中级技能水平之间的C,但是在花了一整天搜索Google之后,每次询问同样的问题时,接受的答案总是涉及使用{{1}或fgets,我们不允许使用,原因很明显。我已经实现了我自己的许多libc函数版本,这些函数可能对这个项目有所帮助,但显然不允许任何使这个项目变得简单快捷的东西。

再一次,请不要使用代码,虽然伪代码很好,但如果有人能帮助我更好地理解我需要的东西,我会更喜欢它,并告诉计算机'要做,从那里我可以自己编写代码。

1 个答案:

答案 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.)

可以提高效率。我建议从基本版本开始,获得正确的功能,然后考虑改进,例如

  1. 性能:从文件中读取,一次可能是4k字节。

  2. 性能:重新使用返回的缓冲区。

  3. 强健并检查分配失败。