fscanf == 1 做什么
what does fscanf being == 1 do
这段代码显然还有更多内容,但我只是好奇这行代码实际上做了什么。我知道 while 循环等等,但我是 fscanf()
的新手
while (fscanf(input_file, "%s", curr_word) == 1)
fscanf()
returns 成功扫描并存储的输入项数。
根据 man page
Return Value
These functions return the number of input items successfully matched and assigned, which can be fewer than provided for, or even zero in the event of an early matching failure.
你的情况
while (fscanf(input_file, "%s", curr_word) == 1)
如果 fsaacf()
能够成功 扫描 一个字符串(根据 %s
格式说明符)从 input_file
并将其放入 curr_word
.
fscanf(input_file, "%s", curr_word)
读取输入流 input_file
并将下一个非间隔字符序列存储到 cuur_word
指向的数组中并附加一个 '[=13=]'
字节。如您所见,此数组的大小未传递给 fscanf
。这是典型的潜在缓冲区溢出案例,黑客可以通过在输入流中存储适当的内容来利用这种安全漏洞。
在 gets
之后,scanf
系列库函数是缓冲区溢出错误的最佳来源。
很难正确使用fscanf
。大多数 C 程序员应该避免它。
这段代码显然还有更多内容,但我只是好奇这行代码实际上做了什么。我知道 while 循环等等,但我是 fscanf()
while (fscanf(input_file, "%s", curr_word) == 1)
fscanf()
returns 成功扫描并存储的输入项数。
根据 man page
Return Value
These functions return the number of input items successfully matched and assigned, which can be fewer than provided for, or even zero in the event of an early matching failure.
你的情况
while (fscanf(input_file, "%s", curr_word) == 1)
如果 fsaacf()
能够成功 扫描 一个字符串(根据 %s
格式说明符)从 input_file
并将其放入 curr_word
.
fscanf(input_file, "%s", curr_word)
读取输入流 input_file
并将下一个非间隔字符序列存储到 cuur_word
指向的数组中并附加一个 '[=13=]'
字节。如您所见,此数组的大小未传递给 fscanf
。这是典型的潜在缓冲区溢出案例,黑客可以通过在输入流中存储适当的内容来利用这种安全漏洞。
在 gets
之后,scanf
系列库函数是缓冲区溢出错误的最佳来源。
很难正确使用fscanf
。大多数 C 程序员应该避免它。