0
#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

4

5 回答 5

4
char arr[]="\0";

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

printf("%s",arr)

%sin 格式说明符告诉printf查找字符串。并printf找到它,但在看到第\0一个字符后停止打印。这就是为什么printf不打印任何内容的原因,因为arr它是一个空字符串。

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

于 2013-09-06T12:16:28.660 回答
2

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

于 2013-09-06T09:34:34.057 回答
0

具有 %s 的 printf() 函数读取值,直到找到 '\0',它没有读取 '\0',它为什么返回 0 并且结果为空。

于 2013-09-06T09:34:51.663 回答
0

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

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

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

于 2013-09-06T09:42:34.087 回答
0

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

于 2013-09-06T13:15:59.020 回答