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

在下面所附的代码中.puts将返回1,printf将返回0.我想知道puts什么时候会归零.

#include <stdio.h>

int main() {
    printf("%d",puts("")); 
    puts("");
    printf("%d",printf(""));
    return 0;
}

推荐答案

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

如果发生写入错误,则puts函数返回EOF;否则返回非负值.

因此,具体由具体的库实现来 Select 返回哪个值.只要该值不是负数,就意味着调用成功.符合标准的C库实现可以返回012345、打印的字符数或任意的随机非负整数.因此,程序员不应该对特定的返回值做出假设.

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

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

如果上面的测试通过(输入if body),那么字符串就被正确打印了.

C++相关问答推荐

变量的const视图是否定义良好?

从C函数调用asm函数时生成错误的BLX指令(STM32H753上的gcc)

GCC:try 使用—WError或—pedantic using pragmas

字符是否必须转换为无符号字符,然后才能与getc家族的返回值进行比较?

为静态库做准备中的奇怪行为

Clang警告称,`ffi_type`与`sizeof`不兼容

在Apple Silicon上编译x86的Fortran/C程序

一旦运行长度超过2,编译器是否会优化";strnlen(mystring,32)>;2";以停止循环?

将字符串数组传递给C中的函数:`str[dim1][str_size]`vs`*str[dim1]`

链接到底是如何工作的,我在这里到底做错了什么

为什么Linux无法映射这个PT_LOAD ELF段?

*S=0;正在优化中.可能是GCC 13号虫?或者是一些不明确的行为?

带有数组指针的 struct 在print_stack()函数中打印随机数

在下面的C程序中,.Ap0是如何解释的?

问题:C#Define上的初始值设定项元素不是常量

为什么GCC不能在 struct 初始值设定项中以sizeof作为条件的三进制中处理复合文字的编译时求值?

挥发性语义的形式化理解

如何为avr atmega32微控制器构建C代码,通过光电二极管捕获光强度并通过串行通信传输数据

可以从指针数组中的值初始化指针吗?

C23 中是否有 __attribute__((nonnull)) 的等效项?