来自用户的输入问题

时间:2013-10-12 08:04:59

标签: c

我现在正在大学学习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;
}

2 个答案:

答案 0 :(得分:3)

gets很危险并且已弃用:

  

由于用户无法指定传递给的缓冲区的长度   gets(),不鼓励使用此函数。字符串的长度   阅读是无限的。在这样的情况下可以溢出这个缓冲区   导致应用程序失败或可能的系统安全性的方法   违规。

改为使用fgets

fgets(name, 256, stdin);

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

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

答案 1 :(得分:1)

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