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

printf returns 6 instead of 0 when assigning a null string

提问人:Dee A 提问时间:10/31/2023 最后编辑:wohlstadDee A 更新时间:10/31/2023 访问量:87

问:

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

int main(void)
{
    int x;
    x = printf("%s", NULL);
    printf ("\n%d", x);
}

输出为:

(null)
6
c printf 空字符串

评论

3赞 KamilCuk 10/31/2023
它不打印吗?那是 6 个字符。(null)
1赞 0___________ 10/31/2023
@DeeA,它返回输出的字符数。所以它是 6
1赞 nielsen 10/31/2023
@DeeA 也许你的意思是使用(空字符串)而不是(无效指针)?""NULL
3赞 Some programmer dude 10/31/2023
完全无关,但请养成在输出中使用尾随换行符的习惯。有些 shell 不会很好地处理不以换行符结尾的输出(因此输出和 shell 提示符在同一行上)。终端的输出通常是行缓冲的,因此前导换行符写入的是前一个输出,而不是当前输出。
1赞 Abderrahmene Rayene Mihoub 10/31/2023
使用 printf 的 %s 说明符打印 NULL 的行为是什么?

答:

5赞 KamilCuk 10/31/2023 #1

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

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

虽然它什么都没有打印?

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

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

评论

0赞 chux - Reinstate Monica 10/31/2023
Answer 使用(使用代码格式)作为代码的描述符,后面使用(也使用代码格式)来指示选择文本输出。请考虑使用“(null)”来增加清晰度。NULL(null)