1

我现在在大学学习C。我想从用户那里得到输入,然后在屏幕上打印出来。我尝试了 scanf 和 fgets 并且它们都崩溃了。请帮助我需要学习如何获取输入然后打印它。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
  char name[256];
  printf("Write something:\n");
  gets(name);
  printf("You wrote: %s", name) ;
  return 0;
}
4

2 回答 2

3

gets危险且已弃用:

由于用户无法指定传递给gets() 的缓冲区的长度,因此不鼓励使用此函数。读取的字符串长度不受限制。溢出此缓冲区可能会导致应用程序失败或可能违反系统安全性。

改用fgets

fgets(name, 256, stdin);

或者

fgets(name, sizeof(name), stdin);

并且它不会崩溃(即使您输入超过 255 个字符)

于 2013-10-12T08:10:56.887 回答
1

永远不要使用gets. 它不提供针对缓冲区溢出漏洞的保护(也就是说,您无法告诉它传递给它的缓冲区有多大,因此它无法阻止用户输入大于缓冲区的行并破坏内存)。
gets()不允许您指定存储字符串的缓冲区的长度。这将允许人们继续输入数据超出缓冲区的末尾。
fgets 如果缓冲区足够大以容纳它,将始终读取换行符(这让您知道缓冲区何时太小并且还有更多行等待读取)。

于 2013-10-12T08:09:28.583 回答