如何在printf中处理'\ 0'?

时间:2013-09-06 09:29:38

标签: 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;
}

这里我认为\0将被视为数组中的1个字节,而printf将返回1个字节,因此不应该打印空白。但输出为empty,表示printf返回0。那么printf如何处理\0

5 个答案:

答案 0 :(得分:3)

char arr[]="\0";

此处,char数组arr有两个元素,它们都是\0。当你使用:

printf("%s",arr)
格式说明符中的

%s告诉printf查找字符串。并且printf找到了它,但是在看到第一个\0之后它停止了打印,这是第一个字符。这就是为什么printf不打印任何内容,因为arr是一个空字符串。

printf的返回值是它打印的字符数,(字符串的字节数)在本例中为0,因为它打印没有,这就是if语句引导程序打印empty的原因。

答案 1 :(得分:2)

与printf不同,但是如何处理字符串。字符串由\ 0终止,它们不“包含”\ 0。您要求printf通过%s打印字符串。所以它打印不包括\ 0的字符串的内容,因此它是空的。

答案 2 :(得分:0)

printf()函数,%s读取值,直到找到'\ 0',它不读'0'表示它返回0并且结果为空的原因。

答案 3 :(得分:0)

arr是包含两个0字节的2个字符的数组。一个0被明确指定,其他被隐式插入到字符串文字中。

当您打印格式说明符为%s的字符串时,printf()会打印,直到遇到0终止符。由于第一个字符是0(请注意,字符串由第一个0本身终止),printf()不会打印任何内容。

printf()返回成功打印的字符数,在这种情况下为0。因此if子句失败并执行else子句。因此empty将作为输出打印。

答案 4 :(得分:0)

这里的主要概念是printf语句的返回类型。 printf 返回号码。正在打印的字符除了语句中的任何 null 字符(如果有)。这里你的字符串只包含空值,因此编译器会忽略它,因此printf块中if语句的返回值为 0 。因此else部分被执行。