黑马程序员技术交流社区

标题: C语言学习笔记之fgets()和fputs()函数的使用 [打印本页]

作者: chunhuayun    时间: 2015-9-28 10:22
标题: C语言学习笔记之fgets()和fputs()函数的使用
1.fgets()函数的使用
原型:    fgets(数组名, 数组长度 stdin);
该函数是一个文件操作相关的函数,暂时使用这个函数可以
从键盘上接受一个字符串并保存到数组中去。

原来接受字符串保存到数组中的方法
  1. #include <stdio.h>
  2. #include <string.h>

  3. int main(int argc, const char * argv[])
  4. {
  5.    
  6.     char str[10];
  7.     //1.scanf
  8.     //scanf("%s",str);//缺点,不能接受空格
  9.     //printf("%s",str);
  10.     //2.gets
  11.     //gets(str);//优点:可以接收空格,但是会有一个不安全的警告,如果字符长度位100,但是输入的字符超过100个的话,此时存在隐患,没有空间再存放结束符
  12.     printf("%s",str);
  13.    
  14.     //3.fgets 是一个安全的字符串接收的函数
  15.     //fgets从输入缓冲区读取一个字符串保存到字符数组中
  16.     //当输入的字符串的长度大于数组的长度,此时fgets会自动把数组的最后一个元素变成‘\0’
  17.     //当输入的字符串小于字符数组长度时,fgets函数还会接收回车符
  18.     fgets(str, sizeof(str), stdin);//
  19.     int len = strlen(str);
  20.     if (str[len - 1] == '\n') {
  21.         str[len - 1]='\0';//去除掉多余的\n
  22.     }
  23.     printf("%s",str);
  24.     return 0;
  25. }
复制代码

打印结果
    I am amos!I am a boy
    I am amos     
分析结果:

看上面的打印结果,只打印了9个字符,最后一个字符自动被设置位\0
2.fputs()函数的使用
  1.     //printf("%s",str);
  2.     //fputs也是一个文件操作相关的函数
  3.     //fputs(数组名, stdout);//表示把一个字符串显示到控制台上
  4.     fputs(str, stdout);//fputs是不会自动换行的,也不能格式化输出
复制代码

3.fgets(),fputs()函数的优缺点
优点:是安全的,scanf和gets都有可能导致越界访问,而fgets可以自动在字符数组结尾设置\0结束符。
缺点:不能格式化输入输出






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2