如何仅在范围内fscanf数据,而不是保存整个数据?

时间:2015-09-16 09:28:57

标签: c arrays scanf

基本上我有数据的行和列。我知道我可以使用fgets逐行读取,然后使用strtok标记该行。之后,我可以使用atoi()检查最后2个令牌/值是否在范围内,如果是,我可以将它们存储到数组中。但是,我听说strtok是一种糟糕的做事方式,而fscanf似乎是一种更清洁的方法。 fscanf的问题是,如果我使用它,我将首先将所有值存储在数组中,然后检查哪些值在范围内。由于我有很多行,我不知道数组应该有多大,这会浪费很多空间。有没有办法用if语句来fscanf?

我不知道这是一个愚蠢的问题,谢谢。

1 个答案:

答案 0 :(得分:0)

无论你浪费什么,它都不会超过线长。由于你的文本显然是一种文本格式,因此1024的行长度通常是限制¹。

因此,在最坏的情况下,您需要(几个?)千字节的内存来解析每一行。您可以重用该缓冲区并忽略不感兴趣的值。

当然,您可以编写自己的解析器并提高内存效率。

<强>更新

还有:scanf

  • (可选)赋值抑制字符*。如果存在此选项,则该函数不会将转换结果分配给任何接收参数。

¹当然可能会有所不同