c++ - 以类似于初始化字符串文字的方式初始化 char 数组

标签 c++ string arrays initialization literals

假设我正在对一个 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/

相关文章:

javascript - JavaScript数组计算和转换

c++ - 什么是双重评估,为什么要避免它?

c++ - 为什么我的 MFC DLL 在接近启动时在单个线程上死锁?

c++ - 当我的程序只能以 1 Mbps 速率处理数据时,如何处理 100 Mbps 输入流

string - 将 PathBuf 转换为 String 时是否有避免克隆的方法?

arrays - 使用元胞数组进行平方欧氏计算

arrays - 调整文件重命名脚本,以便它搜索子目录中的每个文件

C++ boost 随机数生成器为多个实例设置种子

sql - 在 SQL Server 中将字符串拆分为给定行分隔符和列分隔符的表

javascript - 提取对象值并插入到字符串的确切位置