gets()

参考资料:点击打开链接

原型:

char * gets ( char * str );

功能:

通过标准输入(stdin)读入字符并存储到C类型的字符串,当检测到换行符或者文件结束符时停止读入。换行符和文件结束符不读入字符串中。'\0'自动添加到字符串的最后。

参数str:

str是指向一段内存空间的指针或者是字符数组的数组名,它指向所读入的字符串,注意str指向的内存空间原有的内容被修改

返回值:

(1)读入成功:返回str。

(2)读入失败:返回NULL。

例程:

/* gets example */
#include <stdio.h>

int main()
{
  char str [20];
  printf ("Insert your full address: ");
  gets (str);
  printf ("Your address is: %s\n",str);
  return 0;
}

注意:

gets不会自动检测str所指向的内存空间是否足以容纳读入的字符,因而会有可能发生内存非法访问的错误。

在编程中,`gets` 是一个用于从标准输入读取字符串的函数,常见于 C 语言中。它定义在 `<stdio.h>` 头文件中,其原型为: ```c char *gets(char *s); ``` 该函数从标准输入(通常是键盘)读取一行字符,直到遇到换行符或文件结束符,并将读取的内容存储到指针 `s` 所指向的字符数组中。换行符不会被包含在结果中,而是被替换为字符串结束符 `\0`。需要注意的是,`gets` 函数不会检查目标数组的大小,因此如果输入的字符串长度超过了数组的容量,会导致缓冲区溢出,这可能引发程序崩溃或者安全漏洞。 由于这个原因,`gets` 函数在 C99 标准中已经被标记为不推荐使用,并且在 C11 标准中被完全移除。取而代之的是更安全的 `fgets` 函数,它可以指定最大读取长度,从而避免缓冲区溢出的问题。`fgets` 的原型如下: ```c char *fgets(char *s, int size, FILE *stream); ``` 其中 `size` 参数指定了最多可以读取的字符数(包括最后的空字符 `\0`),`stream` 指向了输入流,通常为 `stdin` 表示标准输入。 例如,使用 `fgets` 安全地读取用户输入的代码示例如下: ```c #include <stdio.h> #define MAX_INPUT_LENGTH 100 int main() { char input[MAX_INPUT_LENGTH]; printf("请输入一段文字: "); if (fgets(input, MAX_INPUT_LENGTH, stdin) != NULL) { // 成功读取输入 printf("你输入的是: %s", input); } else { // 读取失败 printf("读取输入时发生错误。\n"); } return 0; } ``` 此段代码中,`fgets` 被用来从标准输入读取最多 99 个字符(加上终止的空字符),这样可以确保不会超出数组 `input` 的边界,从而提高了程序的安全性[^1]。 除了 C 语言之外,在其他一些编程语言中也可能存在名为 `gets` 的函数或方法,但它们的行为和用途可能会有所不同。比如在 Ruby 中,`gets` 方法用于从当前输入源读取下一行输入;而在 Python 中,虽然没有直接的 `gets` 函数,但可以通过 `input()` 或 `sys.stdin.readline()` 来实现类似的功能。 对于与 `gets` 相关的错误处理,开发者应当总是检查函数返回值,以确认是否成功读取了输入。此外,对于任何可能包含恶意数据的输入来源,都应采取额外的验证措施,以防止潜在的安全威胁。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值