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. 初探插头dp

    开学那个月学了点新东西,不知道还记不记得了,mark一下 感觉cdq的论文讲的很详细 题主要跟着kuangbin巨做了几道基础的 http://www.cnblogs.com/kuangbin/arc ...

  2. 能Ping通外网但就是不能打开所有网页的解决办法

    我碰到过两台电脑有这个问题.打百度的ip可以,但打网址不行.我记得是某个木马改动了三个dll文件,然后你电脑删了该木马,却没有恢复那三个dll所致.你google下dns恢复,注册dll关键字,一共要 ...

  3. React中super(props)和super()以及不写super()的区别

    一.constructor()和super()的基本含义 constructor() -- 构造方法 这是ES6对类的默认方法,通过new命令生成对象实例自动调用的方法.并且,该方法是类中必须要有的, ...

  4. hdu6191(树上启发式合并)

    hdu6191 题意 给你一棵带点权的树,每次查询 \(u\) 和 \(x\) ,求以 \(u\) 为根结点的子树上的结点与 \(x\) 异或后最大的结果. 分析 看到子树,直接上树上启发式合并,看到 ...

  5. 【KM】POJ2195/HDU1533-Going home

    //最近没什么时间quq据说长得帅的人都在切八中,然而长得丑的人只能水水裸题 [题目大意] 给出一张地图及人和房屋的位置,求出每个人回到不同房屋所具有的最小代价和. [思路] 最小权匹配,先O(n^2 ...

  6. Java高级架构师(一)第20节:X-gen生成需要的Action

    package cn.javass.themes.smvcsm.actions; import cn.javass.xgen.genconf.vo.ModuleConfModel; import cn ...

  7. xcode中一些便捷用法@literals简写

    总结一下,新的属性绑定规则如下: ●  除非开发者在实现文件中提供getter或setter,否则将自动生成 ● 除非开发者同时提供getter和setter,否则将自动生成实例变量 ●  只要写了s ...

  8. web 中加载配置文件

    1.web.xml中配置   <!-- 加载配置文件 -->   <listener>      <description>ServletContextListen ...

  9. 【Linux】ubuntu或linux网卡配置/etc/network/interfaces

    转自:http://gfrog.net/2008/01/config-file-in-debian-interfaces-1/   青蛙准备写一个系列文章,介绍一些Debian/Ubuntu里面常用的 ...

  10. HTML-DEV-ToolLink(常用的在线字符串编解码、代码压缩、美化、JSON格式化、正则表达式、时间转换工具、二维码生成与解码等工具,支持在线搜索和Chrome插件。)

    HTML-DEV-ToolLink:https://github.com/easonjim/HTML-DEV-ToolLink 常用的在线字符串编解码.代码压缩.美化.JSON格式化.正则表达式.时间 ...