这个问题可能很愚蠢但如果我了解这种行为会很好。
我尝试打印
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
使用简单的程序
char testme [] ="\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\0";
cout<<"testme:"<<testme<<endl;
这种情况下的输出是
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
我打算打印64“\”字符,而输出是32“\”字符。
似乎有一些我缺少的东西,因为输出正好是一半。
编辑:我问的原因是因为,我必须^
“\”另一个字符用于HMAC加密,我看到一些奇怪的事情。
答案 0 :(得分:7)
在C ++ 11中你可以这样做......
char testme [] =R"(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\0)";
cout<<"testme:"<<testme<<endl;
Raw Character Strings
的R“(...)”...
要在字符串文字中表示反斜杠(),我们必须在其前面加上反斜杠。为防止错误(反斜杠太多),C ++提供了raw string literals
...
答案 1 :(得分:5)
这称为转义,是一种将某些字符插入字符串的机制。例如,如果要在字符串中插入引号,则需要将其转义。
char testme [] ="I am a so called \"programmer\".";
还有\n
,\t
和其他代码。但是,这适用于\
本身,因为您可能希望能够使用一个字符串\n
而不将其转换为换行符。
char testme [] ="This is a backslash followed by the letter n: \\n";
答案 2 :(得分:4)
\\
用于表示单个反斜杠:\
。这是因为\
在字符串文字中用于表示其他符号,例如\t
表示标签,\n
表示换行符,\"
表示引号字符。
所以\\
给你一个反斜杠,\\\\
给你两个等等。
答案 3 :(得分:3)
要打印\
标准,请说明
双引号
"
和问号?
可以自己或通过 转义序列分别为\"
和\?
,但单引号'
和反斜杠\
应分别由转义序列\'
和\\
1 表示。
这意味着要打印\
,您需要额外的反斜杠\
。要打印两个\\
,您需要四个反斜杠\\\\
,因此对于64
反斜杠,您需要128
反斜杠。
<子> 1。重点是我的。
答案 4 :(得分:3)
\
是一个称为Escape Character的特殊字符。对于ex :: \n
表示newline character
。因此,如果您要打印single \
,则必须提供\\
。第一个\
表示编译器不将下一个\
视为转义字符。
答案 5 :(得分:3)
如果是C ++,为什么不使用string:
string testme(64, '\\');
cout << testme << endl;
答案 6 :(得分:2)
反斜杠\
是一个非常普遍的转义字符,C ++也使用它。这意味着它用于表达特殊含义(通常是不可打印的字符)。例如,要将换行符(ASCII 10)编码为字符串,请在字符串文字中将其表示为\n
。另一个例子,在一行的末尾放置一个反斜杠(也就是说,在行的终止换行符之前)转义换行符 - 这样,你可以在几个源上继续宏定义或//
- 样式的注释文件行,它们仍然算作一条逻辑行。
这当然意味着要获得字面反斜杠字符,您必须转义反斜杠本身,以删除其“转义字符”状态。因此,在字符串文字中输入\\
会产生一个文字\
字符。
这就是为什么你只得到一半的反斜杠输出--C ++源代码解析器消耗两个来生成一个。
答案 7 :(得分:2)
你没注意到一件事:
你打印了64 '\'
,但它只打印了32张。
你尝试过60,或54,还是一些奇怪的组合。说33?
在C中,'\'
是转义字符。您应该使用'\n'
表示换行,然后您才注意到'\'
未打印。
要打印'\'
,您必须使用'\\'
。
给你一个问题:
尝试打印64 '%'
。看看你得到了什么。尝试了解输出的原因。