gpt4 book ai didi

c - fgets() 是否总是以\0 终止字符缓冲区?

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

即使已经达到 EOF,fgets() 是否总是以\0 终止字符缓冲区?看起来确实如此(在 ANSI K&R 书中介绍的实现中确实如此),但我想我会要求确定。

我想这个问题适用于其他类似的函数,例如 gets()。

编辑:我知道\0 是在“正常”情况下附加的,我的问题是针对 EOF 或错误情况。例如:

FILE *fp;
char b[128];
/* ... */
if (feof(fp)) {
/* is \0 appended after EACH of these calls? */
fgets(b, 128, fp);
fgets(b, 128, fp);
fgets(b, 128, fp);
}

最佳答案

fgets 总是向读取缓冲区添加一个 '\0',它从流中读取最多 size - 1 个字符(size 是第二个参数)因为这个。

切勿使用 gets,因为您永远无法保证它不会溢出您提供的任何缓冲区,因此虽然从技术上讲它总是会终止读取的字符串,但这实际上并没有帮助。

关于c - fgets() 是否总是以\0 终止字符缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1660228/

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