相关疑难解决方法(0)

如何读取用户在C中输入的字符串?

我想阅读用户使用C程序输入的名称.

为此,我写道:

char name[20];

printf("Enter name: ");
gets(name);
Run Code Online (Sandbox Code Playgroud)

但是使用gets不好,那么更好的方法是什么?

c stdin

47
推荐指数
3
解决办法
18万
查看次数

如果有人抱怨gets(),为什么不对scanf("%s",...)做同样的事情?

来自man gets:

永远不要使用gets().因为在不事先知道数据的情况下无法判断get()将读取多少个字符,并且因为gets()将继续存储超出缓冲区末尾的字符,所以使用它是非常危险的.它已被用来打破计算机安全.请改用fgets().

几乎无处不在我看到scanf的应该有同样的问题(一个方式使用缓冲区溢出/缓冲区溢出)scanf("%s",string).这种情况存在这个问题吗?为什么scanf手册页中没有关于它的引用?为什么gcc在编译时不会发出警告-Wall

ps:我知道有一种方法可以在格式字符串中指定字符串的最大长度scanf:

char str[10];
scanf("%9s",str);
Run Code Online (Sandbox Code Playgroud)

编辑:我不是要求确定前面的代码是否正确.我的问题是:如果scanf("%s",string)总是错的,为什么没有警告,手册页中没有任何关于它的内容?

c gets scanf buffer-overflow buffer-overrun

5
推荐指数
1
解决办法
847
查看次数

标签 统计

c ×2

buffer-overflow ×1

buffer-overrun ×1

gets ×1

scanf ×1

stdin ×1