打印""字符C++
Printing "" character in C++
这个问题可能很愚蠢,但如果我理解这种行为,那就太好了。
我尝试打印
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
使用简单的程序
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".";
还有n
、t
和其他代码。但是,这适用于本身,因为您可能希望能够拥有一个表示
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 '%'
。看看你得到了什么。尝试了解输出的原因。
- C++字符*缓冲区的大小
- HEX值到wchar_t字符(UTF-8)的转换
- 为什么 Serial.println(<char[]>);返回随机字符?
- 我的字符计数代码计算错误.为什么
- 字符串-C++后显示的随机字符
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 如何在C++中从字符串中分割字符
- 为什么msgrcv()将垃圾字符馈送到缓冲区
- 指向指向字符数组的指针数组的指针
- 如何用转义符替换字符串中的所有特殊字符
- 为什么 sscanf 无法从一个字符串中读取uint64_t和字符?
- 比较字符数组
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 如何在C++中确定文本文件中的元素是字符还是数字
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++中无符号字符溢出
- 使用无符号字符数组有效存储内存