gets(char buffer[]) 从标准输入读取一行, 并去掉换行符, 在字符串末尾增加 '\0' 字符, 写入到缓冲区

  成功则返回 buffer 的地址, 出错或者遇到文件结尾则返回空指针, 使用 stdio 的  NULL 表示

fgets(char buffer[], int num, FILE * f) 从指定文件 f 中读取 num - 1 个字符, 不会去掉换行符, 并在末尾添加 '\0' 字符, 写入到 buffer

scanf(const char * format [, argument]) 处理字符串时, 更基于获取单词, 而不是获取字符串, 在字符串末尾增加 '\0' 字符, 如果指定了宽度, 则字符串长度为 N + 1, 停止读取字符串结束原因:

  1.遇到了第一个非空白字符

  2.如果指定了宽度, 读取指定宽度后停止读取

  返回 EOF 或者成功读取的变量

fscanf(FILE *stream, const char *format [,    argument ])

  同 scanf 返回

字符串打印都是在遇到 '\0' 时停止

puts() 会自动在字符串末尾加 '\n' 换行符, 与 gets() 互补

fputs() 不自动为输出增加 '\n' 换行符, 与 fgets() 互补

printf()

fprintf()

strlen(const char *str) 获取字符长度, 字符串必须以 '\0' 结束, 不把 '\0' 计算在内

strcpy, ctrcat, sprintf, gets 容易造成缓冲区溢出, 罪魁祸首是不检查变量长度

gets(char *buffer) 从标准输入读取用户输入的一行文本, 它在遇到 EOF 字符或换行字符之前, 不会停止读入文本, 也就是 gets() 根本不执行边界检查, 因此, 使用 gets() 总是有可能使任何缓冲区溢出, 永远不要使用此函数, 不安全, 没有限制输入的字符个数, 如果超出 buffer 会导致程序失败, 可以使用 fgets() 函数做替代

  不要使用如下代码:

char buf[];
gets(buf);

  使用以下代码代替:

char buf[BUFSIZE];
fgets(buf, BUFSIZE, stdin);

strcpy() 将源字符串复制到缓冲区, 没有指定要复制字符的具体数目, 复制字符的数目直接取决于源字符串中的数目, 如果源字符串碰巧来自用户输入, 且没有专门限制其大小, 则有可能会陷入大的麻烦中

  1.如果知道目的地缓冲区的大小, 则可以添加明确的检查

if (strlen(src) >= dst_size) {
/* Do something appropriate, such as throw an error. */
} else {
strcpy(dst, src);
}

  2.使用 strncpy() 函数

strcpy, strcat, sprintf, scanf, sscanf, fscanf, vfscanf, vsprintf, vscanf, vsscanf, streadd, strecpy, strtrns,

最新文章

  1. uname -r和uname -a了解
  2. 《javascript高级程序设计》 第25章 新兴的API
  3. 第一个Cocos2d-JS游戏
  4. [转载]C#时间函数
  5. HDU_2015——偶数求和
  6. Asp.net 网站发布之文件系统方式
  7. Effective Java (7) - 避免终止方法
  8. ueditor .net设置步骤
  9. Python使用MySQL数据库(新)
  10. [PHP] 适配器模式的日常使用
  11. 学习C++后感
  12. Python档案袋(字符串与二进制的编码与解码)
  13. 章节三、5-Getters-Setters和this关键字part01
  14. golang实现分布式缓存笔记(一)基于http的缓存服务
  15. Go sql insert update使用举例
  16. E1. Array and Segments (Easy version)(暴力) && E2. Array and Segments (Hard version)(线段树维护)
  17. 记一次项目使用webuploader爬坑之旅
  18. hihocoder 1580 dp最大子矩阵和
  19. 如何定位占用cpu过高的线程
  20. jQuery获取所有父级元素及同级元素及子元素的方法

热门文章

  1. (四)mysql数据类型
  2. [thinkphp] U方法域名支持
  3. HDU 1180 诡异的楼梯【BFS/楼梯随时间变化】
  4. 组合数学+错排问题【p4071】[SDOI2016]排列计数
  5. NOIP 2015 跳石头
  6. 【2-SAT(两次DFS版)】BZOJ1823-[JSOI2010]满汉全席
  7. [POI2014]Hotel
  8. 1.6(Spring MVC学习笔记)文件上传与下载
  9. 《深入理解Spark-核心思想与源码分析》(一)总体规划和第一章环境准备
  10. 扑克模拟,牌型判断java版