You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求cppreference所述字符串字面量过长致数组new表达式第一维错误的示例

字符串字面量过长导致数组new表达式错误的示例

嘿,我来给你构造一个实打实的例子,一眼就能看明白问题出在哪:

#include <iostream>

int main() {
    // 尝试用含终止符共6个元素的字符串字面量,初始化大小为5的char数组
    char* ptr = new char[5]{"hello"};
    return 0;
}

为什么这个例子会触发错误?

  • 字符串字面量"hello"实际包含的是'h'、'e'、'l'、'l'、'o'、'\0',总共6个元素
  • 我们在new char[5]里指定的数组第一维大小是5,明显小于初始化器提供的元素数量(6)
  • 根据cppreference的规则,这种情况属于非法的数组初始化,编译器会直接抛出编译错误(比如GCC会提示“array bound is not enough to contain the string literal”)

补充说明

你之前想到的auto p写法本质和上面的例子一致,比如auto p = new char[5]{"hello"};,核心问题都是数组指定的维度,小于字符串字面量(含终止符)的实际元素数量。

而且这种错误是编译期就能被捕获的,不会等到运行时才暴露——编译器会直接检查初始化器的元素总数是否超过数组的指定大小。

内容的提问来源于stack exchange,提问作者ledonter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:09:36