我一直在尝试使用fgets
从用户那里获取字符串输入
但是fgets不会等待输入,所以在投资时我了解到gets
函数似乎工作得很好。我的问题是:1。当我输入超过10个字符时,为什么gets
有效,如果我声明了一个只有十个元素的数组。这是我的代码
#include<stdio.h>
int main(void){
char name[10];
printf("Please enter your name: ");
gets(name);
printf("\n");
printf("%s", name);
return 0;
}
我在测试时的输入:morethantenletters
将输出:'morethantenletters'
当然,这应该会导致一些错误,不是吗?由于name
只有十个元素长。
2。我的下一个问题是,当我使用gets(&name)
代替gets(name)
时,我的代码也能正常运行 - 我不明白为什么。 &name
正在发送name
的地址。而name
只是发送它的值,不是吗?
答案 0 :(得分:2)
这正是您应该始终使用fgets
替换gets
的原因。数组name
只有10个元素,但是你试图在其中存储超过它的能力。 fgets
阻止程序缓冲区溢出,但gets
没有。
以这种方式使用gets
时,这是未定义的行为,请勿使用它。
答案 1 :(得分:1)
Since name is only ten elements long.
任何超过10
的接受都将导致缓冲区溢出,并可能导致运行时问题。所以要确保你的尺寸合适。提示:改为使用getline
或fgets
。
while name is just sending the value of it, no?
对于char数组,name
也是其起始位置的地址。