#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
?
答案 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
部分被执行。