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. 隐藏tomcat版本号

    找到catalina.jar, cd /usr/local/tomcat/lib 解压catalina.jar unzip catalina.jar 会生成两个目录 修改配置文件:org/apache ...

  2. 二维字符数组利用gets()函数输入

    举例: ][]; ;i<;i++) gets(a[i]); a是二维字符数组的数组名,相当于一维数组的指针, 所以a[i]就相当于指向第i个数组的指针,类型就相当于char *,相当于字符串.

  3. qt资源下载网站

    1. 所有Qt版本下载地址: http://download.qt.io/archive/qt/ 2. 所有Qt Creator下载地址: http://download.qt.io/archive/ ...

  4. python aiohttp sancio 框架性能测试

    开头先啰嗦两句: 由于本人有开发一个博客的打算,所以近期开始选型python的web框架重头学习,选了两款非常火的 aio web框架 aiohttp 和 sancio 进行性能测试以及开发喜好的调研 ...

  5. 【莫队算法】【权值分块】poj2104 K-th Number / poj2761 Feed the dogs

    先用莫队算法保证在询问之间转移的复杂度,每次转移都需要进行O(sqrt(m))次插入和删除,权值分块的插入/删除是O(1)的. 然后询问的时候用权值分块查询区间k小值,每次是O(sqrt(n))的. ...

  6. 【OpenJudge9268】【递推】酒鬼

    酒鬼 总时间限制: 2000ms 单个测试点时间限制: 1000ms 内存限制: 131072kB [描述] Santo刚刚与房东打赌赢得了一间在New Clondike 的大客厅.今天,他来到这个大 ...

  7. MOD_EXPIRES安装和配置 提高网站速率

    MOD_EXPIRES安装和配置 提高网站速率   实施这一方法将节省你难以置信数额的带宽,极大地加快你的网站为你的网站访客.基本上,对于图片,CSS , JavaScript以及其他文件可以通过优化 ...

  8. java--模板方法模式

    /* 需求:获取一段程序的运行时间 原理:获取程序开始和结束的时间并相减即可 获取时间:用java中已有的一个类:System.currentTimeMillis(); 当代码完成优化后,就可以解决这 ...

  9. <摘录>字节对齐(强制对齐以及自然对齐)

    struct {}node; 32为的x86,window下VC下sizeof(node)的值为1,而linux的gcc下值为0: 一.WINDOWS下(VC--其实GCC和其原理基本一样,象这种问题 ...

  10. 打算安装个Ubuntu双系统,遇到了些基本概念问题(主分区、活动分区、扩展分区、逻辑分区)

    和运维的同事聊天,了解到: 1.XP系统时代(老的硬盘分区形式和分区表),最多允许建4个“主分区”,为了解决这个限制,就有了“扩展分区”的概念: 2.在“扩展分区”上,我们就可以建很多的“逻辑分区”, ...