fscanf = = 1做什么

时间:2015-02-22 18:59:10

标签: c file scanf

显然,这段代码还有很多,但我只是好奇这段代码实际上做了什么。我知道while循环等,但我对fscanf()

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

2 个答案:

答案 0 :(得分:2)

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

根据man page

  

返回值

     

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

在你的情况下

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

fsaacf()如果能够从{{1}成功扫描字符串(根据1格式说明符),将返回值%s并将其放入input_file

答案 1 :(得分:0)

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

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

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