C语言puts函数返回值疑问:何时会返回0?
puts函数何时会返回0?
首先明确结论:标准C中的puts函数永远不会返回0,不管是标准规定还是常见的编译器实现,都不存在puts返回0的场景。
关于puts返回值的标准规则
根据C语言标准,puts的返回值遵循以下规则:
- 成功完成输出操作时,返回一个非负整数(注意:标准并未要求该值等于输出的字符数,这是与printf的关键区别);
- 输出过程中发生错误(比如写入失败)时,返回
EOF(通常被定义为-1)。
为什么空字符串调用puts返回1?
当你传入空字符串""调用puts时,函数会自动在输出末尾追加一个换行符,因此实际输出了1个字符。像glibc这类主流libc实现中,puts会返回实际输出的字符总数(包括自动添加的换行),所以此时返回1。但这属于实现细节,并非标准强制要求——哪怕某个实现让puts成功时固定返回1,也是符合标准的。
printf返回0的原因
printf的返回值定义为成功输出的字符数量,调用printf("")时没有输出任何字符,因此返回0是完全符合标准的行为,这和puts的返回值逻辑完全不同。
最终结论
- 从C标准层面,puts成功时仅返回非负值,不存在返回0的情况;
- 从实际编译器/库实现来看,puts返回输出的字符总数(含换行),最小返回值为1(空字符串场景),同样不会返回0;
- 只有当输出操作出错时,puts才会返回
EOF,永远不会返回0。
内容的提问来源于stack exchange,提问作者Curious-one
相关产品推荐
相关产品推荐

