printf 中如何处理 '\0'?

mri*_*dra 0 c printf

#include<stdio.h>
#include<conio.h>

int main()
{
    char arr[]="\0";
    if(printf("%s",arr))
        printf("not empty");
    else
        printf("empty");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这里我认为\0将被视为数组中的 1 个字节并printf返回 1 个字节,因此不应打印空。但输出就是返回的empty意思。那么如何服用呢?printf0printf\0

Yu *_*Hao 5

char arr[]="\0";
Run Code Online (Sandbox Code Playgroud)

这里,char数组arr有两个元素,它们都是\0。当您使用:

printf("%s",arr)
Run Code Online (Sandbox Code Playgroud)

%s格式说明符指示printf查找字符串。并找到了它,但它在看到第一个(第一个字符)printf后停止打印。\0这就是为什么printf不打印任何内容,因为arr是一个空字符串。

,的返回值printf是它打印的字符数(不是字符串的字节数),在本例中,0因为它什么也不打印,这就是该if语句导致程序打印 的原因empty