gets() 是 C语言标准库提供的函数,定义在
<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://task.lmcjl.com
您输入的名字是:http://task.lmcjl.com
慎重使用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://task.lmcjl.com
您输入的名字是:http://task.lmcjl.com
在这个示例中,我们使用了 fgets() 函数,它需要提供目标缓冲区的大小作为第二个参数,以及文件指针 stdin 作为第三个参数,表示从标准输入读取。这样可以确保输入不会超出缓冲区的大小,从而避免了缓冲区溢出问题。
本文链接:http://task.lmcjl.com/news/4664.html