本节来讲解关于gets函数的用法,在C语言中,除了用scanf,以%s接收字符串之外,还可以使用gets函数更方便的接收字符串。


其函数原型如下:

char *gets(char *str);

在包含 include <stdio.h>头文件的情况下,可以用gets直接往字符数组里接收字符串,我们通过观察函数原型,可以看到在gets中传入一个字符指针,也就是存放这个字符串的字符数组地址即可接收,需要主要的是,要保证能存的下。

其运行过程为:当执行gets函数时,程序会等待用户从键盘输入的字符串,一旦遇到结束标志,即回车,那么之前输入在缓冲区中的字符串则会一起输入到gets中str所指向的内存区域里。此过程与scanf函数类似,最主要的不同在于,scanf接收时的结束标志有空格和回车,而gets不包括空格。也就意味着gets可以接收空格本身作为内容的一部分。这在实际解题、开发过程中时很有用的。


下面看一个例子:

# include <stdio.h>
int main(void)
{
    char str[100] = "\0";  
    printf("请输入字符串:\n");
    gets(str);
    printf("刚才输入的字符串是:\n");
    printf("%s\n", str);
    return 0;
}

当我们运行程序后,直接在程序中输入字符串,如www.dotcpp.com  则程序输出:

刚才输入的字符串是:
www.dotcpp.com

大家可以自行尝试,需要注意的是gets不会检查输入的字符串长度,即可能超出字符串数组的长度造成内存溢出,这其实也是gets函数不安全的原因,其已经在不少OJ中不允许使用。详情可以阅读文章 为什么gets函数不能用了?

点赞(1)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)