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,

C语言-字符串操作函数的更多相关文章

  1. 转:C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文

    转自:C语言字符串操作函数 - strcpy.strcmp.strcat.反转.回文 C++常用库函数atoi,itoa,strcpy,strcmp的实现 作者:jcsu C语言字符串操作函数 1. ...

  2. C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文

    原文:http://www.cnblogs.com/JCSU/articles/1305401.html C语言字符串操作函数 1. 字符串反转 - strRev2. 字符串复制 - strcpy3. ...

  3. C语言字符串操作函数整理

    整理C语言字符串相关的函数,以程序方式验证,以注释方式做说明. #include<stdio.h> #include<string.h> #include<stdlib. ...

  4. C语言字符串操作函数

    1.函数名: stpcpy  功  能: 拷贝一个字符串到另一个  用  法: char *stpcpy(char *destin, char *source);  程序例: #include < ...

  5. C语言字符串操作函数总结

    转载来源:https://blog.csdn.net/qq_33757398/article/details/81212618 字符串相关操作头文件:string.h 1.strcpy函数 原型:st ...

  6. C语言字符串操作函数实现

    1.字符串反转 – strRev void strRev(char *str) { assert(NULL != str);   int length=strlen(str); ; while(end ...

  7. c语言字符串操作大全

     C语言字符串操作函数 函数名: strcpy 功  能: 拷贝一个字符串到另一个 用  法: char *stpcpy(char *destin, char *source); 程序例: #incl ...

  8. C语言的常用字符串操作函数(一)

    一直做的是单片机相关的程序设计,所以程序设计上更偏向底层,对于字符串的操作也仅限于液晶屏幕上的显示等工作,想提高下字符串操作的水平,而不是笨拙的数组替换等方式,翻看帖子发现C语言的字符串操作函数竟然这 ...

  9. C语言字符串操作总结大全(超详细)

    本篇文章是对C语言字符串操作进行了详细的总结分析,需要的朋友参考下 1)字符串操作  strcpy(p, p1) 复制字符串  strncpy(p, p1, n) 复制指定长度字符串  strcat( ...

随机推荐

  1. Educational Codeforces Round 30 B【前缀和+思维/经典原题】

    B. Balanced Substring time limit per test 1 second memory limit per test 256 megabytes input standar ...

  2. HDU 多校1.5

    Expectation Division Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/O ...

  3. Maven学习笔记1

    Maven是什么? 百度百科:Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具. 这些描述总是让人更加难理解Maven,扔掉它,咱们先看看Mave ...

  4. 洛谷——P2719 搞笑世界杯

    题目背景 很久很久以后,一次世界杯,. 题目描述 随着世界杯小组赛的结束,法国,阿根廷等世界强队都纷纷被淘汰,让人心痛不已. 于是有人组织了一场搞笑世界杯,将这些被淘汰的强队重新组织起来和世界杯一同比 ...

  5. P1162 填涂颜色 洛谷

    题目描述 由数字0 组成的方阵中,有一任意形状闭合圈,闭合圈由数字1构成,围圈时只走上下左右4个方向.现要求把闭合圈内的所有空间都填写成2.例如:6X6的方阵(n=6),涂色前和涂色后的方阵如下: 0 ...

  6. 10、Django实战第10天:找回密码

    今天完成的功能是:用户忘记密码后,通过注册邮箱重置密码... 首先还是把前端页面准备好,把forgetpwd.html复制到templates目录下 编辑users.views.py,创建一个忘记密码 ...

  7. 【AC自动机】【动态规划】poj3691 DNA repair

    http://blog.csdn.net/kk303/article/details/6929641 http://blog.csdn.net/human_ck/article/details/657 ...

  8. 【函数式权值分块】【分块】bzoj1901 Zju2112 Dynamic Rankings

    论某O(n*sqrt(n))的带修改区间k大值算法. 首先对序列分块,分成sqrt(n)块. 然后对权值分块,共维护sqrt(n)个权值分块,对于权值分块T[i],存储了序列分块的前i块的权值情况. ...

  9. 【kruscal】【最小生成树】【并查集扩展】bzoj3714 [PA2014]Kuglarz

    ORZ:http://www.cnblogs.com/zrts/p/bzoj3714.html #include<cstdio> #include<algorithm> usi ...

  10. 1.5(Spring MVC学习笔记) 拦截器(Interceptor)

    一.拦截器 1.1拦截器简介 Spring中的拦截器类似Servlet中的过滤器(Filter),主要用于拦截用户请求, 并进行一定的处理操作(如验证权限.记录日志.设置编码方式等). 1.2拦截器实 ...