我一直在尝试使用 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
只是发送它的值,不是吗?
最佳答案
这正是您应该始终使用 fgets
来替换 gets
的原因。数组 name
只有 10 个元素,但您试图在其中存储的元素超出了它的能力。 fgets
防止程序缓冲区溢出,但 gets
没有。
以这种方式使用gets
是未定义行为,请勿使用。
关于c - 在 C 中使用 "gets"作为字符串输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21085028/