我现在正在大学学习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;
}
答案 0 :(得分:3)
gets
很危险并且已弃用:
由于用户无法指定传递给的缓冲区的长度 gets(),不鼓励使用此函数。字符串的长度 阅读是无限的。在这样的情况下可以溢出这个缓冲区 导致应用程序失败或可能的系统安全性的方法 违规。
改为使用fgets:
fgets(name, 256, stdin);
或
fgets(name, sizeof(name), stdin);
并且它不会崩溃(即使你键入超过255个字符)
答案 1 :(得分:1)
永远不要使用gets
。它没有提供针对缓冲区溢出漏洞的保护(也就是说,您无法告诉它传递给它的缓冲区有多大,因此它无法阻止用户输入大于缓冲区和破坏内存的行)。
gets()
不允许您指定存储字符串的缓冲区长度。这样可以让人们在缓冲区末尾输入数据。
如果缓冲区大到足以容纳它,那么fgets
将始终读取换行符(这可以让你知道缓冲区何时太小而且还有更多的行等待读取)。