c - 如何仅扫描范围内的数据,而不是保存整个数据?

标签 c arrays scanf

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

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

最佳答案

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

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

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

更新

还有这个:scanf :

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

¹当然可能会有所不同

关于c - 如何仅扫描范围内的数据,而不是保存整个数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32604679/

相关文章:

c++ - Visual Studio 上的 C

c++ - 如何在程序中包含数据对象文件(图像等)并访问符号?

arrays - 如何在没有循环的情况下更改 bash 数组元素的值

c - 修改传递给函数的 char 数组,C

c - 使用 sscanf 读取空间

c - 在 list 中使用 requireAdministrator 恢复为 Windows 程序中的普通用户?

c - 文件系统性能

java - 如果大小未知,如何在 java 中使用 char 数组?

go - 如何向 Scan 语句添加提示?

c - 读取 C 中的选项卡