打印""字符C++

Printing "" character in C++

本文关键字:C++ 字符 打印      更新时间:2023-10-16

这个问题可能很愚蠢,但如果我理解这种行为,那就太好了。

我尝试打印

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

使用简单的程序

char testme [] ="\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\";
cout<<"testme:"<<testme<<endl;

在这种情况下,输出是

\\\\\\\\\\\\\\\

我打算打印 64 个"\"字符,而不是输出 32 个"\"字符。

似乎我错过了一些东西,因为输出正好是一半。

编辑:我问的原因是因为,我必须^"\"到另一个字符进行HMAC加密,我看到一些奇怪的东西。

在 C++11 中你可以这样做......

char testme [] =R"(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)";
cout<<"testme:"<<testme<<endl;

R"(Raw Character Strings...要表示字符串文字中的反斜杠 (),我们必须在它前面加上反斜杠。为了防止错误(反斜杠太多),C++提供了raw string literals...

这称为转义,是一种将某些字符插入字符串的机制。例如,如果要在字符串中插入引文标记,则需要对其进行转义。

char testme [] ="I am a so called "programmer".";

还有nt和其他代码。但是,这适用于本身,因为您可能希望能够拥有一个表示n的字符串,而无需将其转换为换行符。

char testme [] ="This is a backslash followed by the letter n: \n";

\ 用于表示单个反斜杠: 。这是因为在字符串文本中用于表示其他符号,例如制表符的t,换行符的n和引号字符的"

所以\给你一个反斜杠,\\给你两个反斜杠,依此类推。

打印标准声明

C11; 6.4.4.4 字符常量:

双引号"和问号?可以单独表示,也可以由 转义序列分别"?,但单引号'和反斜杠 应分别由转义序列'\ 1 表示。

这意味着要打印您需要一个额外的反斜杠。要打印两个\您需要四个反斜杠\\ 64因此对于反斜杠,您需要128反斜杠。


1.重点是我的。

是一个

称为转义字符的特殊字符。例如:: n 表示 newline character .所以,如果你想打印single ,你必须给\.第一个表示编译器不要将下一个视为转义字符。

如果是C++,为什么不使用字符串:

string testme(64, '');
cout << testme << endl;

斜杠是一个非常普遍的转义字符,C++也这样使用它。这意味着它用于表达特殊含义(通常是不可打印的字符)。例如,若要将换行符 (ASCII 10) 编码为字符串,请将其表示为字符串文本中的n。另一个示例,在行尾放置单个反斜杠(即,在该行的终止换行符之前)转义换行符 - 因此,这样,您可以跨多个源文件行继续宏定义或//样式注释,并且它们仍将计为一个逻辑行。

这当然意味着要获得文字反斜杠字符,您必须转义反斜杠本身,以删除其"转义字符"状态。因此,在字符串文本中键入\会产生文本字符。

这就是为什么你只得到一半的反斜杠输出 - C++源代码解析器消耗两个来生成一个。

你没有注意到一件事:

您打印了 64 ''但只打印了其中的 32 个。

您是否尝试过 60、54 或一些奇怪的组合,比如 33 ?

在 C 中,''是转义字符。您应该使用'n'换行符,当时您没有注意到,''没有被打印。

要打印''必须使用 ''

一个问题要问你:

尝试打印 64 '%' 。看看你得到了什么。尝试了解输出的原因。