在 C 字符串中包含双引号 (") [重复]
Posted
技术标签:
【中文标题】在 C 字符串中包含双引号 (") [重复]【英文标题】:Include double-quote (") in C-string [duplicate] 【发布时间】:2013-12-08 20:14:50 【问题描述】:我想在 C 中定义一个包含以下字符集的变量字符串:a-zA-Z0-9'-_”
。
因此我会这样做:
char str[64] = "abcdefghijklmnopqrstuwxyzABCDEFGHIJKLMNOPQRSTUWXYZ0123456789'-_""
如您所见,问题以"
字符结尾。
问题 1:我该如何解决?
问题2:有没有比我这样定义字符串更好的方法?
PS:我真的不知道如何命名我的问题,所以如果你有更好的,请编辑它。
【问题讨论】:
转义最后一个引号:\"
用反斜杠转义它:"\""
。请注意,使用 str[64]
您有足够的空间容纳所有 64 个字符,但没有足够的空间容纳空终止符。根据您计划如何使用字符串,这可能是一个问题。但是,通过这种初始化,指定长度是可选的,因此char str[] = "...";
是有效的,并且会自动使缓冲区大到足以包含字符串 + 空终止符。
除非你省略了一些我没有注意到的字母,那是 66 个字符。
@HotLicks 我将它复制并粘贴到记事本 ++ 中,其中包含 64 个字符:其中没有 v(大写或小写)。
丘吉尔会失望的。
【参考方案1】:
使用反斜杠:"\""
是包含"
的字符串
像这样:
char str[67] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'-_\"";
在末尾为隐含的 '\0' 添加了一个(并放入缺少的 vV) - 这也可能是:
char str[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'-_\"";
让编译器为您计算 - 然后您可以使用 sizeof(str)
获得计数;
67 是怎么加起来的?
a-z 26
A-Z 26
0-9 10
'-_" 4
'\0' 1
---
67
【讨论】:
好的,谢谢。但是有没有更好的方法来定义这个字符串? 如果你想要它作为一个字符串——这就是你需要做的——如果你想要一个正则表达式(正则表达式)那么你可以根据你使用的正则表达式引擎来表达它——在C++11有std::regex
应该是char str[66] = ...
,不是吗?
或者你可以省略数组长度,因为它在这样的初始化中是可选的。另外:里面没有v,所以65对于字符串+空终止符就足够了。
@HotLicks - 67 编辑显示数学【参考方案2】:
使用"\""
(反斜杠“)将"
放入字符串中
【讨论】:
以上是关于在 C 字符串中包含双引号 (") [重复]的主要内容,如果未能解决你的问题,请参考以下文章