如何在C ++ char数组中存储“\ 0”?

时间:2016-06-04 18:32:32

标签: c++ arrays

根据C ++ char数组规则,它以\ 0 null字符结尾。如果我想在C ++ char数组中保存并打印\0怎么做

#include <iostream>
using namespace std;
int main()
{
    char name[] = {'H', 'o', 'n', 'd', 'a', '\0'};
    cout << name; // how to print Honda\0
    return 0;
}

4 个答案:

答案 0 :(得分:5)

转义字符必须转义

#include <iostream>
using namespace std;
int main()
{
    char name[] = {'H', 'o', 'n', 'd', 'a', '\\', '0', '\0'};
                                         // ^^^^^^^^^^
    cout << name; // prints Honda\0
    return 0;
}

答案 1 :(得分:3)

您需要存储'\\''0'以及最后的'\0'来终止它。 '\\'有两个反斜杠,因为其中一个是转义字符。

答案 2 :(得分:2)

  

根据C ++ char数组规则,它以\ 0 null字符结束。

没有规则说char 数组通常以空字符结尾。但是,字符 strings 必须以此结束,并且传递给流的字符数组必须是字符串。

  

如果我想在C ++ char数组中保存并打印\ 0怎么做

您不能将其作为字符串的一部分。

但是,您可以单独打印它作为独立字符:

char nul = '\0'
std::cout << nul;

但是,如果您希望在终端中看到某些内容,那么您可能会感到失望,因为\0是不可打印的字符。如果将程序输出传递给hexdump或类似工具,则可以看到空字符(即零值)是程序输出的一部分。

如果您的目标是打印字符\0,只需将这些字符作为字符串的一部分(如其他答案中所示,但为了完整性,我会将其包含在此处) 。请记住,必须转义转义字符。

char name[] = {'H', 'o', 'n', 'd', 'a', '\\', '0' '\0'};

答案 3 :(得分:0)

如果您的意思是{C}字符串末尾的单个终止字符'\0',则不必像其他答案所解释的那样明确地存储它。请注意,在终止'\' 字符之前存储额外的'0''\0'可打印字符与打印/存储终止'\0'不同。

您无法使用'\0'打印C字符串的终止[f]printf( "%s", ... );C Standard 7.21.6.1 fprintf函数< /强>

  

如果不存在l长度修饰符,则参数应为指针   到字符类型数组的初始元素。   数组中的字符被写入(但不包括)终止空字符。如果精度   指定,不超过写入的多个字节。如果   精度未指定或大于。的大小   数组,数组应包含一个空字符。

您无法打印实际的'\0'字符本身,因为它不打印,但您可以打印字符串来表示它:

void printStrAndTerm( FILE *fp, const unsigned char *str )
{
    do
    {
        if ( *str )
        {
            fputc( *str, fp );
        }
        else
        {
            fputs( "\\0", fp );
        }
        str++;
    }
    while ( *str );
}