在C中使用“gets”表示String输入

时间:2014-01-13 06:19:43

标签: c fgets gets

我一直在尝试使用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只是发送它的值,不是吗?

2 个答案:

答案 0 :(得分:2)

这正是您应该始终使用fgets替换gets的原因。数组name只有10个元素,但是你试图在其中存储超过它的能力。 fgets阻止程序缓冲区溢出,但gets没有。

以这种方式使用gets时,这是未定义的行为,请勿使用它。

答案 1 :(得分:1)

Since name is only ten elements long. 

任何超过10的接受都将导致缓冲区溢出,并可能导致运行时问题。所以要确保你的尺寸合适。提示:改为使用getlinefgets

while name is just sending the value of it, no?

对于char数组,name也是其起始位置的地址。