printf返回什么?
今天在我的采访中,采访者问:printf是一个函数,每个函数都返回一些东西; int,void,float等。现在printf返回什么,因为它是一个函数?
int
。 成功时,返回写入的字符总数。 失败时,返回负数。
请参阅此处的参考
并非每个函数都返回一些东西,使用void
表示:
void function_returns_nothing(void);
printf
是一个函数(在
声明)并返回一个int
,即输出的字符数。 如果发生错误,则该数字为负数。
printf()
来自MSDN的参考:
返回打印的字符数,如果发生错误则返回负值。
要将细节细化添加到其他精细答案:
printf()
返回一个int
,但这是否表示传输与打印/写入的字符?
printf
函数返回传输的字符数,如果发生输出或编码错误,则返回负值。 C11dr§7.21.6.33(我的重点)
成功时,返回传输的数量。 stdout
通常是缓冲的 ,因此打印的字符数可能无法实现或直到稍后才会失败。
当int printf()
因各种原因出现问题时,它会返回一个负数。 传输的字符数是未知的。
如果发生以下成功的fflush(stdout)
,则printf()
的非负值肯定是打印的数字。
int transmitted = printf(......); int flush_retval = fflush(stdout); int number_certainly_printed = -1; // Unknown if (transmitted >= 0 && flush_retval == 0) { number_certainly_printed = transmitted; }
请注意,“打印” '\n'
通常会刷新stdout
,但是甚至没有指定该操作。
在C中自动刷新stdout缓冲区的规则是什么?