gpt4 book ai didi

c - 为什么 gets() 不起作用?

转载 作者:太空狗 更新时间:2023-10-29 16:46:00 25 4
gpt4 key购买 nike

我在 Unix 中用 C 编程,我正在使用 gets 从键盘读取输入。我总是收到此警告并且程序停止运行:

warning: this program uses gets(), which is unsafe.

有人能告诉我这是为什么吗?

最佳答案

gets 是不安全的,因为你给它一个缓冲区,但你没有告诉它缓冲区有多大。输入可能会超出缓冲区的末尾,从而相当惊人地炸毁您的程序。使用 fgets 会好一些,因为您告诉它缓冲区有多大,如下所示:

const int bufsize = 4096; /* Or a #define or whatever */
char buffer[bufsize];

fgets(buffer, bufsize, stdin);

...所以只要您给它提供正确的信息,它就不会写入超过缓冲区的末尾并破坏一切。

有点 OT,但是:

您不必为缓冲区大小使用 const int,但我强烈建议您不要只在两个地方都输入文字数字,因为你不可避免地会在以后改变一个而不是另一个。编译器可以帮助:

char buffer[4096];
fgets(buffer, (sizeof buffer / sizeof buffer[0]), stdin);

该表达式在编译时得到解析,而不是运行时。打字很麻烦,所以我曾经在我常用的一组标题中使用宏:

#define ARRAYCOUNT(a) (sizeof a / sizeof a[0])

...但是我的纯 C 已经过时了几年,现在可能有更好的方法。

关于c - 为什么 gets() 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2973985/

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