- gets 不推荐使用,gets(s) 等价于 fgets(s, INT_MAX, stdin),因为没有对缓冲区溢出做处理,不安全;
- getline 碰到EOF返回-1,fgets返回NULL;
- 传入getline的buffer指针如果为NULL,函数会分配缓冲区用于存储行字符串,并由调用者释放。如果传入buffer空间不足以存放一行,那么函数会自动扩增缓冲区空间,同时更新其指针及缓冲区大小。
传入fgets的buffer空间如果不足以存放一行,fgets提前返回,并在末尾添加null byte('0')。
getline有2个版本:getline和getdelim。
getline从stream(流)读取一整行字符串,存放到缓冲区buffer,并将buffer地址存储到指针lineptr。其中,buffer以空字符('0')结尾,并且包含换行符。
如果在调用getline之前,
lineptr被设置为NULL,n被设置为0,getline()将会分配(new/malloc)一个buffer用于存储一行文本。该buffer应该由调用者释放,即使getline调用失败。
如果在调用getline之前,buffer不够大,getline()会用realloc重新分配其大小,同时更新
lineptr和*n。
也就是说,getline存放一行字符串的buffer可以由调用者提供,也可以由函数分配;然而,释放都是由调用者进行。
来自getline page
符合C89, C99, POSIX.1-2001.,不过目前已经弃用,推荐使用fgets。
相当于。不过,这样并不不安全,因为gets不会检查s是否会溢出。
fgets最多从指定stream流读取 size-1个字符,并且存储到s指向的buffer中。读取遇到EOF或换行符停止。每读取一行,buffer末尾会自动添加'0'。
也就是说,fgets存放一行字符串的buffer必须是由调用者提供,fgets不会分配任何存储字符串的空间。
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/3446.html