【问题标题】:what does fscanf being == 1 dofscanf being == 1 是做什么的
【发布时间】:2015-02-22 18:59:09
【问题描述】:

显然,这段代码还有更多内容,但我只是好奇这行代码实际上做了什么。我知道 while 循环之类的,但对 fscanf() 是新手@

while (fscanf(input_file, "%s", curr_word) == 1)

【问题讨论】:

  • 谷歌“fscanf”并点击第一个链接。
  • 您应该始终阅读您正在使用的任何功能的手册(尤其是您不确定的功能)

标签: c file scanf


【解决方案1】:

fscanf() 返回成功扫描和存储的输入项数。

根据man page

返回值

这些函数返回成功匹配和分配的输入项的数量,该数量可能少于提供的数量,在早期匹配失败的情况下甚至为零。

你的情况

while (fscanf(input_file, "%s", curr_word) == 1)

fsaacf() 如果能够成功扫描来自input_file 的字符串(根据%s 格式说明符),则返回1 的值并将其放入@987654328 @。

【讨论】:

    【解决方案2】:

    fscanf(input_file, "%s", curr_word) 读取输入流input_file 并将下一个非空格字符序列存储到cuur_word 指向的数组中,并附加一个'\0' 字节。如你所见,这个数组的大小并没有传递给fscanf。这是一个典型的潜在缓冲区溢出案例,黑客可以通过在输入流中存储适当的内容来利用这一安全漏洞。

    gets 之后,scanf 系列库函数是人们可以找到的缓冲区溢出错误的最佳来源。

    正确使用fscanf 非常困难。大多数 C 程序员应该避免它。

    【讨论】:

      猜你喜欢
      • 2021-01-11
      • 2015-08-17
      • 1970-01-01
      • 2015-08-30
      • 2022-01-25
      • 1970-01-01
      • 1970-01-01
      • 2015-09-20
      相关资源
      最近更新 更多