当前位置:网站首页 > 技术博客 > 正文

getch linux



  1. gets 不推荐使用,gets(s) 等价于 fgets(s, INT_MAX, stdin),因为没有对缓冲区溢出做处理,不安全;
  2. getline 碰到EOF返回-1,fgets返回NULL;
  3. 传入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不会分配任何存储字符串的空间。

版权声明


相关文章:

  • 定义在类中的变量被称为2025-07-10 17:01:01
  • 异或的意义2025-07-10 17:01:01
  • 刷题下载2025-07-10 17:01:01
  • 数据库开发工具哪种好2025-07-10 17:01:01
  • java jdk 环境变量配置2025-07-10 17:01:01
  • cisaw安全运维好考吗2025-07-10 17:01:01
  • 新闻管理系统设计2025-07-10 17:01:01
  • html的iframe嵌入外部页面2025-07-10 17:01:01
  • 有没有图片对比相似的软件2025-07-10 17:01:01
  • nat网络地址转换协议2025-07-10 17:01:01