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



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

#include<stdio.h>
int main() 
{
char ch = '';
printf("%d",printf("%c", ch)) ;
// This line will print 1.
printf("%d",printf("")) ;
// This line will print 0.
return 0;
}
printf("%d", printf("%c", ''));

为什么此行打印 1?

''是一个字符,"%c"发送标准输出(尽管您看不到它(。

printf("%d", printf("%s", ""));

为什么此行打印 0?

字符串""包含两个字符:文字''和隐含''。它们都没有印有"%s",第一个零终止字符串。字符串"foo"有 4 个字符:3 个文字字符和隐含''

指 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没有什么可打印或NULL.所以输出为 0

#include<stdio.h>
int main() 
{
char ch = '';
printf("%d",printf("%c", ch)) ;

内部调用printf()打印一个空字符(您看不到它(并返回1作为打印的字符数,然后将其打印为字符串1(您得到一个 null 加一个数字1(。

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

在这种情况下,您提供一个以两个连续的空字符结尾的字符串文本,这会导致打印一个空字符串(字面意思是""(,这会导致将一个0传递给第二个 printf,第二个 printf 将其打印为字符串0

// This line will print 0.
return 0;
}

所以,你错了,在第一种情况下,你打印了一个空字符(一个真正的在 1 之前。但是您正在使用的终端会忽略null,并且不会显示在屏幕上,而第二个不会打印任何内容·(

注意

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

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

相关内容

  • 没有找到相关文章

最新更新