gets、fgets、gets_s、scanf函数学习总结

原创 2016年08月28日 21:01:56

1、gets()函数:

a、读取整行输入输入,直至遇到换行符,然后丢弃换行符,在字符的结尾添加一个空字符使其成为一个C字符串(经常和puts()函数搭配使用-->显示字符串,并且在末尾添加换行符),对应a输入 

b、隐患:如果输入的字符过长,会导致缓冲区溢出,即多余的字符超出了指定的目标空间(对应b输入)
/*getsputs.c--使用gets()和puts()*/
#include <stdio.h>
#define STLEN 81
int main(void)
{
    char words[STLEN];

    puts("Enter a string,please.");
    gets(words);             //典型用法
    printf("Your string twice:\n");
    printf("%s\n",words);    //效果相同
    puts(words);             //同上
    puts("Done.");

    return 0;
}

/*****************************************
a输入
Enter a string,please.
I want to learn about string theory!
Your string twice:
I want to learn about string theory!
I want to learn about string theory!
Done.
*****************************************/

/****************************************
b输入
Enter a string,please.
warning:this program uses gets(),which is unsafe.
I think I'll be just fine.
Your string twice:
I think I'll be just fine. 
I think I'll be just fine.
Done.
Segmentation fault:11
****************************************/

2、fgets()函数:

a、第二个参数限制读入字符的最大数量,如果参数的值是n,那么fgets()将读入n-1个字符,或者读到遇到的第一个换行符为止

b、读取到一个换行符,会将其储存在字符串中

c、fgets()的第三个参数指明要读入的文件,如果从键盘输入数据,则以stdin(标准输入)作为参数,该标识符定义在stdio.h中(fgets()函数通常和fputs()函数使用,该函数不在字符串末尾添加换行符,如果要显示在屏幕上,则使用stdout作为参数)
/*fgetsl.c--使用fgets()和fputs()*/
#include <stdio.h>
#define STLEN 14
int main(void)
{
    char words[STLEN];

    puts("Enter a string.please.");
    fgets(words,STLEN,stdin);
    printf("Your string twice(puts(),then fputs())\n");
    puts(words);
    fputs(words,stdout);
    puts("Enter another string,please.");
    fgets(words,STLEN,stdin);
    printf("Your string twice (puts(),then fputs()):\n");
    puts(words);
    fputs(words,stdout);
    puts("Done");

    return 0;
}

**************************************************
Enter a string.please.
apple tie
Your string twice(puts(),then fputs())
apple tie

apple tie
Enter another string,please.
strawberry shortcake
Your string twice (puts(),then fputs()):
strawberry sh
strawberry shDone
***************************************************

3、gets_s()函数:

a、只从标准输入中读取数据,无需第三个参数

b、如果读取到换行符,丢弃他而不是储存他

c、如果读取到最大字符数都未读取到换行符,会执行以下几步:目标数组首字符设置为空字符,读取并且丢弃随后的输入直至读到换行符或者文件结尾,然后返回空指针,接着调用依赖实现的"处理函数"

4、scanf()函数:

  从第一个非空白字符作为字符串的开始,如果使用%s转换说明,以下一个空白字符(空行,空格,制表符或者换行符)作为字符串的结束(字符串不包括空白字符),如果指定了字符宽度,如%10s,那么scanf()函数将读取10个字符或读到第1个空白字符停止(先满足的条件即是结束输入的条件)

 输入语句               原输入序列        name中的内容     剩余输入序列
scanf("%s",name);    Fleebert Hup        Fleebert            _Hup
scanf("%5s",name);   Fleebert Hup        Fleeb            ert Hu
scanf("%5s",name);     Ann Ular            Ann              _Ular 
/*scan_str.c--使用scanf()*/
#include <stdio.h>
int main(void)
{
    char name1[11],name2[11];
    int count;

    printf("Please enter 2 names.\n");
    count = scanf("%5s %10s",name1,name2);
    printf("I need the %d name %s and %s.\n",count,name1,name2);

    return 0;
}

/***************************************************
Please enter 2 names.
Jesse Jukes
I need the 2 name Jesse and Jukes.

Please enter 2 names.
Liza Applebottham
I need the 2 name Liza and Applebotth.

Please enter 2 names.
Portensia Callowit
I need the 2 name Porte and nsia.
***************************************************/
版权声明:本文为博主原创文章,未经博主允许不得转载。

gets函数和fgets函数

今天在LINUX下编译C程序时,出现了: warning: the `gets' function is dangerous and should not be used. 这个warning...
  • jiayichendddd
  • jiayichendddd
  • 2013年11月21日 21:35
  • 1483

linux文件操作-标准I/O操作--fgets与gets

fgets与gets 1 gets介绍 [函数原型]                #include                char * gets ( char * str ); [函数描...
  • u012606927
  • u012606927
  • 2013年12月28日 19:57
  • 2178

fgets fputs 的结合使用 ;gets puts的结合使用

先看每个函数的原型:
  • u012566181
  • u012566181
  • 2014年05月09日 11:40
  • 743

从终端读取一行数据,fgets,gets,c++ string类定义的getline

从终端读取一行数据,且看getline,fgets,gets的区别。 先看getline,
  • zzyafyj
  • zzyafyj
  • 2014年08月13日 01:00
  • 5951

【C语言天天练(十五)】字符串输入函数fgets、gets和scanf

引言:如果想把一个字符串读到程序中,必须首先预留存储字符串的空间,然后使用输入函数来获取这个字符串。 读取字符串输入的第一件事是建立一个空间以存放读入的字符串。 char *name; scanf...
  • To_Be_IT_1
  • To_Be_IT_1
  • 2014年06月23日 09:41
  • 1765

fgets、gets和scanf的区别

gets()从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为null值,并由此来结束字...
  • u012951123
  • u012951123
  • 2013年12月02日 09:13
  • 689

fgets和gets的区别

在编程中发现gets和fgets一些区别总结一下; 1、 fgets比gets安全,使用gets编译时会警告 为了安全,gets少用,因为其没有指定输入字符的大小,限制...
  • cquptzzq
  • cquptzzq
  • 2014年01月19日 16:15
  • 519

fgets、gets和scanf的区别

gets()从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为null值,并由此来结束字...
  • junjun5156
  • junjun5156
  • 2016年01月21日 15:02
  • 270

gets函数和fgets函数

1、 gets函数  gets函数从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换...
  • qq_20580201
  • qq_20580201
  • 2016年12月01日 21:21
  • 89

fgets、gets和scanf的区别

gets()从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为null值,并由此来结束字...
  • chenzhou1023
  • chenzhou1023
  • 2015年12月22日 16:23
  • 292
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:gets、fgets、gets_s、scanf函数学习总结
举报原因:
原因补充:

(最多只允许输入30个字)