C-在嵌套的printf语句中使用%C打印空字符

C-在嵌套的printf语句中使用%C打印空字符,c,null,printf,C,Null,Printf,为什么即使两个函数的打印值相同,两个内部printf函数的工作方式也不同? 这是代码-: #include<stdio.h> int main() { char ch = '\0'; printf("%d",printf("%c", ch)) ; // This line will print 1. printf("%d",printf("\0")) ; // This line will print 0. return 0; }

为什么即使两个函数的打印值相同,两个内部printf函数的工作方式也不同? 这是代码-:

#include<stdio.h>
int main() 
{
    char ch = '\0';

    printf("%d",printf("%c", ch)) ;
    // This line will print 1.

    printf("%d",printf("\0")) ;
    // This line will print 0.
   return 0;
}

参考printf手册页

man 3 printf
printf返回以下内容

RETURN VALUE
   Upon successful return, these functions return the number of characters printed (excluding the null byte used to end output to strings).
因此,它不会返回空字节的计数


在第一个printf中,您明确要求打印1个字符,因此输出为1。在第二个printf中,没有要打印的内容或空值。因此,输出为0,表示printf的手册页

man 3 printf
printf返回以下内容

RETURN VALUE
   Upon successful return, these functions return the number of characters printed (excluding the null byte used to end output to strings).
因此,它不会返回空字节的计数

在第一个printf中,您明确要求打印1个字符,因此输出为1。在第二个printf中,没有要打印的内容或空值。所以输出是0

为什么这行打印1

值“\0”是一个字符,虽然您看不到它,但%c会将其发送给stdout

为什么这行打印0

字符串\0中有两个字符:文本'\0'和隐含的'\0'。它们都不是用%s打印的,第一个零终止字符串。字符串foo有4个字符:3个文字字符和隐含的“\0”

为什么这行打印1

值“\0”是一个字符,虽然您看不到它,但%c会将其发送给stdout

为什么这行打印0

字符串\0中有两个字符:文本'\0'和隐含的'\0'。它们都不是用%s打印的,第一个零终止字符串。字符串foo有4个字符:3个文字字符和隐含的“\0”

在本例中,您提供了一个以两个连续的空字符结尾的字符串文字,这将导致按字面方式打印空字符串,并导致传递给第二个printf a 0,第二个printf将其打印为字符串0

因此,您错了,在第一种情况下,您得到了一个空字符,它在tje 1之前打印为true\0。但是你正在使用的终端会忽略空值,它不会显示在你的屏幕上,而第二个则不会打印任何内容·

笔记 每个与C语言字符串相关的函数都会探索字符串,以了解它的长度,或者何时停止它正在执行的任务。放置超过默认字符串文字的最后一个空字符\0只会缩短字符串文字的有用部分。如果您试图打印Se estáquemando la serrería\0。。。Duduap!!或者使用任何与字符串相关的函数对其进行操作,将得到与在第一个\0字符之前停止相同的结果。因此,上面的字符串文字基本上等同于Se estáquemando la serrería

在本例中,您提供了一个以两个连续的空字符结尾的字符串文字,这将导致按字面方式打印空字符串,并导致传递给第二个printf a 0,第二个printf将其打印为字符串0

因此,您错了,在第一种情况下,您得到了一个空字符,它在tje 1之前打印为true\0。但是你正在使用的终端会忽略空值,它不会显示在你的屏幕上,而第二个则不会打印任何内容·

笔记
每个与C语言字符串相关的函数都会探索字符串,以了解它的长度,或者何时停止它正在执行的任务。放置超过默认字符串文字的最后一个空字符\0只会缩短字符串文字的有用部分。如果您试图打印Se estáquemando la serrería\0。。。Duduap!!或者使用任何与字符串相关的函数对其进行操作,将得到与在第一个\0字符之前停止相同的结果。因此,上面的字符串文字基本上等同于Se estáquemando la Serreria

它们的工作方式不同,因为第一个内部printf打印的是一个字符,而该字符是一个长度为1的空字符。在第二个内部printf中,您试图打印只包含空字符的字符串,但由于空字符,字符串变为空,长度为0。这就是第一个外部printf打印1和第二个外部printf打印0的原因。

它们的工作方式不同,因为第一个内部printf打印一个字符,而该字符是长度为1的空字符。在第二个内部printf中,您试图打印只包含空字符的字符串,但由于空字符,字符串变为空,长度为0。这就是为什么您的第一个外部打印F打印1,第二个外部打印F打印0的原因。

请将您的代码作为文本编辑到您的问题中。请花一些时间刷新、拍摄SO、阅读以及。唯一比发布代码图片更糟糕的是发布代码图片的链接。图片不能被未来的读者搜索,链接可以/并且确实会腐烂。因此,代码链接会同时遭受这两种痛苦。代码格式正确,文本缩进,属于您的文章正文。使用这一行:printf%c,您可以明确地告诉您要打印一个字符,这样printf就会返回
1.第二行:printf\0没有要打印的内容。例如,如果调用printf\0dsfsdfs,也会得到0作为返回值。文本字符串\0实际上是一个由两个字符组成的数组,一个是显式编写的“\0”,另一个是编译器添加的“\0”。还要记住,字符串和字符文本中的转义序列是由编译器展开的。这意味着char ch='\0';本质上翻译为char ch=0;。请将您的代码作为文本编辑到您的问题中。请花一些时间刷新、拍摄SO、阅读以及。唯一比发布代码图片更糟糕的事情是发布代码图片的链接。图片不能被未来的读者搜索,链接可以/并且确实会腐烂。因此,代码链接会同时遭受这两种痛苦。该代码格式正确,文本缩进,属于您的文章正文。使用该行:printf%c,您明确地告诉您要打印一个字符,因此printf返回1。第二行:printf\0没有要打印的内容。例如,如果调用printf\0dsfsdfs,也会得到0作为返回值。文本字符串\0实际上是一个由两个字符组成的数组,一个是显式编写的“\0”,另一个是编译器添加的“\0”。还要记住,字符串和字符文本中的转义序列是由编译器展开的。这意味着char ch='\0';本质上翻译为char ch=0;。
#include<stdio.h>
int main() 
{
    char ch = '\0';

    printf("%d",printf("%c", ch)) ;
    // This line will print 1.

    printf("%d",printf("\0")) ;
    // This line will print 0.
   return 0;
}