gpt4 book ai didi

c - 为什么在程序中两次使用 gets() 来获取两个不同数组的输入即使对于第一个数组也只返回第二个输入?

转载 作者:太空宇宙 更新时间:2023-11-04 06:11:18 24 4
gpt4 key购买 nike

下面的代码接受两次输入并将其保存在两个单独的数组中。当使用 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 进行编译。
  • 您的数组没有空间。它们的声明在 C 中在技术上是非法的(你不能有零大小的数组或空的初始值设定项),但编译器倾向于允许它们作为扩展。无论如何,C 数组不会动态增长以满足您的需求; C 太低级了。
  • 因此,gets 只是用读入的内容覆盖您的堆栈。由于这些数组的大小为 0,它们位于相同的位置,因此第二次读取会覆盖第一次。

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

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

关于c - 为什么在程序中两次使用 gets() 来获取两个不同数组的输入即使对于第一个数组也只返回第二个输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55979888/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com