C语言-字符串操作函数
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,
最新文章
- uname -r和uname -a了解
- 《javascript高级程序设计》 第25章 新兴的API
- 第一个Cocos2d-JS游戏
- [转载]C#时间函数
- HDU_2015——偶数求和
- Asp.net 网站发布之文件系统方式
- Effective Java (7) - 避免终止方法
- ueditor .net设置步骤
- Python使用MySQL数据库(新)
- [PHP] 适配器模式的日常使用
- 学习C++后感
- Python档案袋(字符串与二进制的编码与解码)
- 章节三、5-Getters-Setters和this关键字part01
- golang实现分布式缓存笔记(一)基于http的缓存服务
- Go sql insert update使用举例
- E1. Array and Segments (Easy version)(暴力) &;&; E2. Array and Segments (Hard version)(线段树维护)
- 记一次项目使用webuploader爬坑之旅
- hihocoder 1580 dp最大子矩阵和
- 如何定位占用cpu过高的线程
- jQuery获取所有父级元素及同级元素及子元素的方法
热门文章
- (四)mysql数据类型
- [thinkphp] U方法域名支持
- HDU 1180 诡异的楼梯【BFS/楼梯随时间变化】
- 组合数学+错排问题【p4071】[SDOI2016]排列计数
- NOIP 2015 跳石头
- 【2-SAT(两次DFS版)】BZOJ1823-[JSOI2010]满汉全席
- [POI2014]Hotel
- 1.6(Spring MVC学习笔记)文件上传与下载
- 《深入理解Spark-核心思想与源码分析》(一)总体规划和第一章环境准备
- 扑克模拟,牌型判断java版