为什么在程序中两次使用 gets() 来获取两个不同数组的输入 returns 即使是第一个数组也只有第二个输入?

Why does using gets() twice in a program to take inputs for two different arrays returns only the second input even for the first array?

下面的代码接受两次输入并将其保存在两个单独的数组中。当使用 puts() 打印这些数组时,puts(array1); 返回与 puts(array1); 相同的值。为什么会这样?

int main()
{
    char array1[]={};
    char array2[]={};

    printf("Enter String 1: ");
    gets(array1);

    printf("Enter String 2: ");
    gets(array2);

    puts(array1);
    puts(array2);
}
  • 不要使用 gets()。不可能安全地使用并且会愉快地溢出你给它的任何和所有数组。此外,较新版本的 C 已将其完全删除。在 GCC 和 Clang 上,尝试使用 -std=c11.
  • 进行编译
  • 您的阵列没有 space。它们的声明在 C 中在技术上是非法的(你不能有零大小的数组或空的初始值设定项),但编译器倾向于允许它们作为扩展。无论如何,C 数组不会动态增长以满足您的需求; C 太低级了。
  • 因此,gets 只是用读入的内容覆盖您的堆栈。并且由于这些数组的大小为 0,它们位于相同的位置,因此第二次读取会覆盖第一次。

总而言之,您的程序表现出许多未定义的行为,因此您不能依赖它做任何特别的事情。

您需要为数组提供足够的 space 来包含读取的字符串。您需要告诉读取功能不要读取超过 space 的数量。由于 gets 无法做到这一点,因此您需要使用 fgets 或其他 可能 的函数。