c - 在 C 中使用 "gets"作为字符串输入

标签 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 只是发送它的值,不是吗?

最佳答案

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

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

关于c - 在 C 中使用 "gets"作为字符串输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21085028/

相关文章:

c - 在c函数中传递指针值的问题

c - 读取文件,修改每一行,将其存储到缓冲区中,一次打印

c - 释放结构内的内存时程序崩溃

ruby - gets.chomp 不换行

c - 以编程方式解决魔方

C 从文件中读取空格分隔值

c - 使用 fgets 和 strtok 从文件中读取和解析行

c - 文本文件内的文本单词搜索 - C 编程

将文件内容复制到双数组

c - 在C.scanf中输入gets之前。问题