基本上我有数据的行和列。我知道我可以使用fgets逐行读取,然后使用strtok标记该行。之后,我可以使用atoi()检查最后2个令牌/值是否在范围内,如果是,我可以将它们存储到数组中。但是,我听说strtok是一种糟糕的做事方式,而fscanf似乎是一种更清洁的方法。 fscanf的问题是,如果我使用它,我将首先将所有值存储在数组中,然后检查哪些值在范围内。由于我有很多行,我不知道数组应该有多大,这会浪费很多空间。有没有办法用if语句来fscanf?
我不知道这是一个愚蠢的问题,谢谢。
答案 0 :(得分:0)
无论你浪费什么,它都不会超过线长。由于你的文本显然是一种文本格式,因此1024的行长度通常是限制¹。
因此,在最坏的情况下,您需要(几个?)千字节的内存来解析每一行。您可以重用该缓冲区并忽略不感兴趣的值。
当然,您可以编写自己的解析器并提高内存效率。
<强>更新强>
还有:scanf
:
*
。如果存在此选项,则该函数不会将转换结果分配给任何接收参数。¹当然可能会有所不同