我有一种情况,如果我的程序的一部分没有动作,我必须打印出一个NUL角色。以下面的代码为例:
char x = '\0';
...
printf("@%c@\n", x);
我希望它打印出来:
@@
但打印出来
@@
正确的方法是不要将\ 0字符打印出上面的空格?
答案 0 :(得分:7)
if (x == 0)
printf("@@\n");
else
printf("@%c@\n", x);
它实际上并没有打印空格,它实际上输出了\ 0。只是无论您正在查看文本,显示 \ 0作为空格。
答案 1 :(得分:2)
你在哪个系统?该代码为我打印@@
。这是我的示例程序:
#include <stdio.h>
int main(int argc, char *argv[])
{
char x = '\0';
printf("@%c@\n", x);
return 0;
}
我的日志:
$ make
cc -Wall -o app main.c
$ ./app
@@
答案 2 :(得分:0)
稍微紧凑的@codeka's solution形式:
#include <stdio.h>
int main(void) {
char x = '\0';
printf(x ? "@%c@\n" : "@@\n", x);
return 0;
}
答案 3 :(得分:0)
您可以使用精度为1的%s
说明符:
printf( "@%.1s@", &x);
这会将x
中的数据视为'\0'
终止字符串,但最多只能打印一个字符,因此没有'\0'
终结符后无关紧要人物。如果x == 0
那么它是一个空字符串,所以在'@'字符之间没有打印任何内容。
当然,如果你这样做,你必须传递指向角色的指针而不是角色本身(因此&x
)。
有点hacky,但我认为仍然在可接受的范围内解决问题。