显然,这段代码还有很多,但我只是好奇这段代码实际上做了什么。我知道while循环等,但我对fscanf()
while (fscanf(input_file, "%s", curr_word) == 1)
答案 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程序员都应该避免使用它。