当我尝试在定义点初始化字符串文字数组时,它可以正常工作:
char* arr[3] = { "ahmed" , "saeed" , "ahmed" };
但是当我尝试在定义点之后为其分配这些值时,它从第二个值开始给我一个错误:
char* arr[3] ;
arr[3] = { "ahmed" , "saeed" , "ahmed"};
这里和发生什么了?
错误:
Severity Code Description Project File Line Suppression State
Error (active) E0146 too many initializer values structs_consts
Severity Code Description Project File Line Suppression State
Error C2440 '=': cannot convert from 'initializer list' to 'char *' structs_consts
谢谢。
答案 0 :(得分:6)
区别在于,一个是初始化,另一个是[尝试]分配。这些是不同的结构。
您无法分配给数组。你就是不行即使可以,您[可能]也无法使用初始化语法来做到这一点。
这是C的规则。为什么?不知道。
一旦数组存在,您就必须分别为其元素分配(直接,通过std::copy
或memcpy
或其他类似方式分配给元素)。
特定的编译器错误是因为您尝试使用表达式a[3]
来执行此操作,但这不是数组的名称。数组的名称仅为a
。 a[3]
是不存在的元素。
声明中的a[3]
所表示的含义有所不同。是的,令人困惑。
一个不错的std::array<std::string_view, 3>
游戏怎么样?