-2

我需要从文本文件中读取姓名、姓氏和电话号码,并将它们保存在电话簿应用程序的结构中。问题是不知道文本有多少行,我如何安排我的代码,以便它读取文本包含的确切行数。

4

2 回答 2

0

真的取决于您对“读取确切行数”的定义。

[1]风向标在评论中说,while/fgets 是最安全的工作方式...阅读直到遇到 EOF 然后停止。

[2] 如果信息来自普通文件,您可以 stat(2) 文件以在读取之前获取其确切大小。

[3](如果您猜错了,由于存在错误的风险,解决方案较差):分配一个比需要大得多的缓冲区,并在一次大规模读取中读取所有行。为了安全起见,我会在读取之前对缓冲区进行零填充,并读取比分配的少一个字节。“读取”将返回确切的字节数,除非返回 read() 中请求的所有字节,这表明您猜错了并且溢出了缓冲区。您准确读取它并且没有更多字节的机会非常低。

于 2019-12-26T20:53:25.853 回答
0

一个简单的技巧是读取文件两次。第一次计算行数。然后分配存储空间。然后你再次阅读并填充你刚刚分配的空间。

于 2019-12-26T21:41:46.643 回答