printf 在分配空字符串时返回 6 而不是 0

0 c printf null-string

为什么函数在将其作为字符串printf分配给它时返回 6 而不是 0 ,尽管它什么也没打印?NULL

int main(void)
{
    int x;
    x = printf("%s", NULL);
    printf ("\n%d", x);
}
Run Code Online (Sandbox Code Playgroud)

输出是:

(null)
6
Run Code Online (Sandbox Code Playgroud)

Kam*_*Cuk 5

为什么 printf 函数在将 NULL 作为字符串分配给它时返回 6 而不是 0

因为它打印了6个字符。“(null)”是 6 个字符。

虽然它什么也没打印?

它正在打印“(空)”。那是 6 个字符。

NULL请注意,作为参数传递给%s格式说明符首先是无效的,并且会导致未定义的行为。某些实现(例如您正在使用的实现)正在打印“(null)”而不是崩溃。