是否有一些技巧可以定义没有尾随字符的常量字符串文字'\0'?
#define ARRAY_LEN(array) (sizeof(array)/sizeof((array)[0]))
static const char c_seqence[] = "___----__--_-_";
Run Code Online (Sandbox Code Playgroud)
因此 usingARRAY_LEN(c_seqence)返回实际序列长度而不带'\0'? 不应产生运行时开销。{'_','_',...}显然,由于可读性更好,类似字符串的表示形式比字符数组初始化更受青睐。
C 解决方案是首选,但某些 C++ 解决方案也可能很有趣,只要它们不依赖于 c++11 功能。
\n\n\n是否有一些技巧可以定义没有 \n 尾随 \'\\0\' 字符的常量字符串文字?
\n
在 C 中,如果将字符数组的大小指定为比字符串文字初始值设定项的大小小 1,则它不会有尾随空字符。你可以这样做:
\n\nstatic const char c_seqence[ARRAY_LEN("___----__--_-_")-1] = "___----__--_-_";\nRun Code Online (Sandbox Code Playgroud)\n\n当然,为了避免在同一行中两次指示字符串文字,您可能需要定义一个宏来执行此操作:
\n\n#define MAKE_STR_LITERAL(n, l) static const char n[ARRAY_LEN(l)-1] = l\nRun Code Online (Sandbox Code Playgroud)\n\n你可以这样使用它:
\n\nMAKE_STR_LITERAL(c_seqence, "___----__--_-_");\nRun Code Online (Sandbox Code Playgroud)\n\n笔记:
\n\n如/sf/answers/304373191/中所述,此行为位于标准的第 6.7.8 节中(引用该答案):
\n\n\n\n\n\xc2\xa7 6.7.8p14
\n\n字符类型数组可以由字符串文字初始化,可以选择用大括号括起来。字符串文字的连续字符(如果有空间或数组大小未知,则包括终止空字符)初始化数组的元素。
\n
Note2:事实证明这是一个仅限 C 的东西。在 C++ 中它不会编译。这是为什么人们不应该同时使用 C 和 C++ 来标记问题的另一个很好的例子。
\n