gpt4 book ai didi

c : gets() and fputs() are dangerous functions?

转载 作者:太空宇宙 更新时间:2023-11-04 01:39:08 25 4
gpt4 key购买 nike

在学校的计算机实验室中,我们使用 fputs 编写了一个程序,编译器返回了一个错误 gets is a dangerous function to use 和一个类似的错误 fputs

但是在家里,当我输入这段代码时:

#include <stdio.h>
main()
{
FILE *fp;
char name[20];
fp = fopen("name.txt","w");
gets(name);

fputs(name,fp);
fclose(fp);
}

我从来没有得到任何错误。学校的那个和这个差不多,就是有点长,变数比较多。
我在家里使用 codeblocks,在学校使用 fedora 提供的默认 gcc。
会不会是编译器的问题?

最佳答案

使用gets,您需要准确知道要读取多少个字符,并相应地使用足够大的缓冲区。如果您使用的缓冲区小于您读取的文件内容,您最终会超出分配的缓冲区范围进行写入,这会导致未定义的行为 和无效的程序。

相反,您应该使用 fgets,它允许您指定要读取的数据量。

您不会收到任何错误,因为很可能您分配的缓冲区 name 足够大,可以容纳文件 name.txt 的内容,但如果不是,则这是一个问题,因此编译器会发出警告。

关于c : gets() and fputs() are dangerous functions?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8921827/

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