为何向printf传入NULL字符串时返回6而非0?
printf("%s", NULL)返回值为6的原因分析
代码示例
int main(void) { int x; x = printf("%s", NULL); printf ("\n%d", x); }
输出结果
(null) 6
原因解析
- 从C语言标准定义来看,使用
%s格式符传入NULL属于未定义行为,标准没有强制规定如何处理这种情况。但GCC、Clang等主流编译器的标准库做了友好兼容,会自动把NULL转换为字符串"(null)"输出。 printf函数的返回值是成功输出的字符总数,而非表示成功/失败的状态码。"(null)"这个字符串刚好包含6个字符(左右括号各1个,中间"null"4个),所以返回值为6。- 你预期的0是
printf输出失败时的返回值,但这里标准库已经完成了输出操作,因此不会返回0。
内容的提问来源于stack exchange,提问作者Dee A
相关产品推荐
相关产品推荐

