代码之家  ›  专栏  ›  技术社区  ›  Steve Obbayi

如何在C中打印没有空格的nul字符?

c c++
  •  2
  • Steve Obbayi  · 技术社区  · 16 年前

    我有一种情况,如果我的程序中没有任何动作,我必须打印出一个nul字符。以下面的代码为例:

    char x = '\0';
    
    ...
    
    printf("@%c@\n", x);
    

    我想把它打印出来:

    @

    但是打印出来了

    @

    如果不按上述方式打印\0字符,正确的方法是什么?

    4 回复  |  直到 16 年前
        1
  •  7
  •   Dean Harding    16 年前
    if (x == 0)
        printf("@@\n");
    else
        printf("@%c@\n", x);
    

    它实际上不是打印一个空格,而是输出\0。只是不管你用什么看文本 显示 将\0作为空格。

        2
  •  2
  •   Carl Norum    16 年前

    你用的是什么系统?代码打印 @@ 为了我。以下是我的示例程序:

    #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 
    @@
    
        3
  •  0
  •   Community Mohan Dere    9 年前

    更紧凑的形式 @codeka's solution :

    #include <stdio.h>
    
    int main(void) {
        char x = '\0';
        printf(x ? "@%c@\n" : "@@\n", x);
        return 0;
    }
    
        4
  •  0
  •   Michael Burr    16 年前

    你可以用 %s 精度为1的说明符:

    printf( "@%.1s@", &x);
    

    这将处理 x 作为 '\0' 以字符串结尾,但最多只能打印一个字符,因此没有 ‘0’ 字符后的终止符。如果 x == 0 那么它是一个空字符串,所以在“@”字符之间不打印任何内容。

    当然,如果这样做,则必须将指针传递给角色,而不是角色本身(因此 &x )

    有点像黑客,但我认为这个问题仍然在可接受的范围内。