假设我正在对一个 char 数组进行初始化:
char charArray[]={'h','e','l','l','o',' ','w','o','r','l','d'};
我还有以下字符串文字的初始化:
char stringLiteral[]="hello world";
第一个数组和第二个字符串的内容之间的唯一区别是第二个字符串的末尾有一个空字符。
当涉及到初始化 char 数组的问题时,是否有宏或其他东西允许我们将初始化文本放在两个双引号之间,但数组没有额外的空终止字符?
对我来说没有意义的是,当不需要终止空字符时,我们应该使用首先提到的初始化语法并为初始化文本中的每个字符写两个单引号,以及virgule标记来单独的字符。
我应该补充一点,当我想要一个 char 数组时,很明显我不想将它用于依赖字符串文字的函数以及没有使用字符串文字的功能结果,在我的考虑范围内。
非常感谢您的回答。
最佳答案
在 C 中允许如下声明数组,这将初始化它而不复制终止 '\0'
char c[3] = "foo";
但它在 C++ 中是非法的。我不知道允许它用于 C++ 的技巧。 C++ 标准进一步说
基本原理:当这些未终止的数组由标准字符串例程操作时,有可能发生重大灾难。
对原始特征的影响:删除语义明确的特征。
转换难度:语义转换。必须将数组声明为大一个元素以包含以“\0”结尾的字符串。
使用的广泛程度:很少。这种数组初始化风格被视为糟糕的编码风格。
关于c++ - 以类似于初始化字符串文字的方式初始化 char 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3216462/