fgets(“文件获取字符串”)函数类似于get函数。这个函数被废弃了--这意味着它已经过时了,并且强烈建议你不要使用它--因为它是危险的。这很危险,因为如果输入数据包含空字符,则无法判断。除非您知道数据不能包含null,否则不要使用fgets。不要使用它读取用户编辑的文件,因为如果用户插入空字符,则应该正确处理该字符或打印清楚的错误消息。如果可以,请始终使用getline或getdelim而不是fgets。
我认为fgets函数在遇到\0或\n时会停止;当fgets应该正确处理输入时,为什么这个手动页面表示空字节是“危险的”?此外,getline和fgets之间有什么区别,fgets函数在C99或未来的C标准中是否真正被认为是不可取的呢?
发布于 2013-05-01 17:30:48
不,fgets实际上在C99或当前标准C11中不受欢迎。但是,该教程的作者是正确的,fgets不会在遇到NUL时停止,也没有机制来报告它对这样一个字符的读取。
fgets函数最多将n指定的字符数从stream指向的流读取到s指向的数组中。在新的行字符(保留的)之后或文件结束后不读取其他字符.
(第7.21.7.2节)
GNU的getdelim和getline已经在2008年POSIX中标准化,所以如果您针对的是POSIX平台,那么使用这些平台可能不是个坏主意。
编辑我认为绝对没有安全的方法在面对无字符的情况下使用fgets,但是R.(见评论)指出:
char buf[256];
memset(buf, '\n', sizeof(buf)); // fgets will never write a newline
fgets(buf, sizeof(buf), fp);现在查找buf中的最后一个非buf字符。不过,我并不推荐这个传说。
发布于 2013-05-01 17:34:43
这只是GNU的宣传。在官方意义上,fgets是不受欢迎的。然而,gets是危险的,不受欢迎的。
https://stackoverflow.com/questions/16323185
复制相似问题