C语言中puts函数的返回值

The return value of puts function in C

提问人:Shashaank 提问时间:11/10/2023 最后编辑:Marco BonelliShashaank 更新时间:11/10/2023 访问量:88

问:

我正在学习函数和返回值,我知道该函数返回一个非负整数(我假设打印的字符数)或任何错误,但是它什么时候会返回零?我认为可以返回的最小数字是 1(默认情况下它打印换行符)。putsEOFputs

在下面附加的代码中。会回来,会回来.我想知道什么时候会返回零。puts1printf0puts

#include <stdio.h>

int main() {
    printf("%d",puts("")); 
    puts("");
    printf("%d",printf(""));
    return 0;
}
c 返回 printf 看跌期权

评论

1赞 Lundin 11/10/2023
是什么让你认为它会永远归零?正如您已经得出的结论,这不应该发生,因为它将始终打印换行符。
0赞 Shashaank 11/10/2023
Put 返回一个“非负整数”
1赞 Jabberwocky 11/10/2023
@Lundin实际上可以很好地返回 0。返回值未指定为输出字符串的长度。puts
1赞 Jabberwocky 11/10/2023
我的平台上的@Lundin返回 0。它可能不寻常,但它是符合的。puts("Foo")
2赞 Lundin 11/10/2023
@Jabberwocky 问题是:在 1970 年代为 stdio.h 编写函数的人对如何设计有用且坚固耐用的 API 完全一无所知。他们可能根本没有写规范,只是漫无目的地被砍掉了。大约 20 年后,这个老废话成为标准的一部分,一些可怜的灵魂不得不将其正式化。它是迄今为止为任何编程语言编写的最糟糕的库,缺陷众多且严重。早在 1980 年代,它就应该被一个更好的图书馆所取代。

答:

4赞 Marco Bonelli 11/10/2023 #1

C 标准(C99 第 7.19.7.10 段)也描述了 C 标准库的某些方面,它说:

如果发生写入错误,该函数将返回;否则,它将返回一个非负值。putsEOF

因此,由特定的库实现来准确选择要返回的值。只要该值不为负数,就表示调用成功。符合要求的 C 库实现可以返回 、 、 打印的字符数或任何随机非负整数。因此,程序员不应对特定的返回值做出假设。012345

那么,测试成功的正确方法是:

if (puts(...) != EOF) {...}
// or
if (puts(...) >= 0) {...}

如果上述测试通过(您输入正文),则字符串已正确打印。if

评论

0赞 Shashaank 11/10/2023
所以没有“特定”的返回值,我的意思是我不能事先知道返回值?
2赞 Marco Bonelli 11/10/2023
@Shashaank是的,没错。不应对返回值做出假设。
0赞 Shashaank 11/10/2023
哦,好的@MarcoBonelli谢谢:-)