如何在C中没有空格的情况下打印NUL字符?

时间:2010-03-17 02:26:35

标签: c++ c

我有一种情况,如果我的程序的一部分没有动作,我必须打印出一个NUL角色。以下面的代码为例:

char x = '\0';

...

printf("@%c@\n", x);

我希望它打印出来:

  

@@

但打印出来

  

@@

正确的方法是不要将\ 0字符打印出上面的空格?

4 个答案:

答案 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,但我认为仍然在可接受的范围内解决问题。