首页 > 编程笔记
C语言gets():输入一个字符串
gets() 是 C语言标准库提供的函数,定义在
gets() 用于从标准输入(通常是键盘)读取一个字符串,直到遇到换行符(Enter键)为止,最终将读取到的字符串存储到指定的字符数组中,并在字符串的末尾添加
gets() 函数的原型如下:
【实例】用 gets() 函数读取某个用户的姓名,请看下面的 C语言代码。
在上面的实例中,name 数组最多只能存储 50 个字符,而 gets() 函数读取的字符串长度很可能大于 50。这种情况下,用户输入的内容超过了数组的大小,数据会覆盖到相邻的内存区域,就称为缓冲区溢出。缓冲区溢出会导致程序的运行变得不稳定,甚至崩溃。
从 C11 标准开始,不再推荐使用 gets() 函数。取而代之,更安全的选择是使用 fgets() 函数。以下是使用 fgets() 函数的示例。
<stdio.h>
头文件中。gets() 用于从标准输入(通常是键盘)读取一个字符串,直到遇到换行符(Enter键)为止,最终将读取到的字符串存储到指定的字符数组中,并在字符串的末尾添加
'\0'
。gets() 函数的原型如下:
char *gets(char *str);
参数
str 是 char* 类型的指针,指向存储字符串的字符数组。返回值
返回一个 char* 类型的指针,它指向的是成功读取的字符串。【实例】用 gets() 函数读取某个用户的姓名,请看下面的 C语言代码。
#include <stdio.h> int main() { char name[50]; // 用于存储输入的字符串 printf("请输入您的名字:"); gets(name); // 读取用户输入的一行文本 printf("您输入的名字是:%s\n", name); return 0; }执行结果为:
请输入您的名字:http://c.biancheng.net
您输入的名字是:http://c.biancheng.net
慎重使用gets()函数
由于 gets() 存在缓冲区溢出的安全风险,从 C11 标准开始已被废弃。在上面的实例中,name 数组最多只能存储 50 个字符,而 gets() 函数读取的字符串长度很可能大于 50。这种情况下,用户输入的内容超过了数组的大小,数据会覆盖到相邻的内存区域,就称为缓冲区溢出。缓冲区溢出会导致程序的运行变得不稳定,甚至崩溃。
从 C11 标准开始,不再推荐使用 gets() 函数。取而代之,更安全的选择是使用 fgets() 函数。以下是使用 fgets() 函数的示例。
#include <stdio.h> int main() { char name[50]; // 用于存储输入的字符串 printf("请输入您的名字:"); fgets(name, sizeof(name), stdin); // 读取用户输入的一行文本 printf("您输入的名字是:%s\n", name); return 0; }输出结果为:
请输入您的名字:http://c.biancheng.net
您输入的名字是:http://c.biancheng.net