我需要从文本文件中读取姓名和电话号码,并将它们保存在电话簿应用程序的结构中。问题是不知道文本有多少行,我如何安排我的代码,以便它读取文本包含的确切行数。
实际上取决于您对"读取确切行数"的定义。
[1] 风向标在评论中说,一段时间/fgets 是最安全的工作方式......阅读直到遇到EOF,然后停止。
[2] 如果信息来自普通文件,你可以在读取之前统计(2(文件以获得它的确切大小。
[3](如果你猜错了,由于错误的风险,解决方案较差(:分配一个比需要大得多的缓冲区,并在一次大规模读取中读取所有行。为了安全起见,我会在读取之前将缓冲区归零,并读取比分配的字节少一个字节。"read"将返回确切的字节数,除非返回read((中请求的所有字节,这表明您猜错了并溢出了缓冲区。您准确读取它并且没有更多字节的可能性非常低。
一个简单的技巧是读取文件两次。第一次计算行数时。然后,分配存储空间。然后你再次阅读并填充你刚刚分配的空间。