为什么 fgets() 需要用户输入的最大大小?是不是因为它没有scanf()的“限制到第一个空格”属性?

问题描述 投票:0回答:1

这是

fgets()
的官方原型:

char *fgets(char *str, int n, FILE *stream);

为什么要指定尺寸?是为了防止某种缓冲区溢出吗?还是这只是一个设计缺陷?

我认为这是由

gets()
导致缓冲区溢出和程序段错误的倾向引起的,但这只是我的猜测。

无论如何,这可能与

fgets()
是一个文件函数有关,但我也不知道。

这是在最近关于缓冲区溢出的视频的背景下,在安全背景下,这是否存在风险?大小是否是一个限制,并且在这种情况下容易出现段错误?

c c-strings fgets buffer-overflow
1个回答
0
投票

来自 cppreference.com 文档

count - 要写入的最大字符数(通常是 str 的长度)

count
是您在问题中命名为
n
的参数。

所以基本上答案是肯定的,这是为了防止填充时缓冲区溢出

str

© www.soinside.com 2019 - 2024. All rights reserved.