为什么将指针重新分配给 1D 数组的 char 时显示错误,但 2D 数组工作正常?
why when re-assigning pointer to char for 1D array shows error but 2D array works fine?
看到这个问题,我对一维和二维数组完全感到困惑。
Example:
char *ar[3] = { 'a', 'b' };
ar[1] = 'f'; // shows error that i could not assign
char *games[3] = {
"roadrash",
"nfs",
"angrybirds"
};
games[0] = "hitman"; // works fine
代码中没有二维数组。 它是指向char*
的指针的一维数组。
该代码的所有行都是错误的
char *ar[3] = { 'a', 'b' };
char*
和const char
不是兼容的类型。如果您打算声明一个 3 个字符的数组,它将是
char ar[3] = { 'a', 'b' };
ar[1] = 'f'; // ar is now "af "
不能使用字符串文本初始化非常量char*
。char
处指针的数组games
char *games[3] = {
应该是
const char *games[3] = {
是正确的。如果 pointee 的类型不是const char
,则初始化和后续赋值
games[0] = "hitman";
不正确,因为不能将字符串分配给char
处的指针,而只能将字符串分配给const char
处的指针。字符串文本表示常量缓冲区,在这种情况下,它是更改值并指向编译器预分配的不同字符串的指针。如果你需要可变字符串,你需要分配一个足够大的缓冲区来将字符串复制到其中,例如
char * games[3];
const char* hitman = "hitman";
games[0] = new char[strlen(hitman)+1];
strcpy(games[0], hitman);
坦率地说,如果我们谈论标准C++,这是一个废话代码。强烈建议使用标准字符串组件来操作字符串。
// #include <string> assumed
// does all allocation inside of constructor
std::string games[3] = {
"roadrash",
"nfs",
"angrybirds"
};
// reallocated and copies storage as per to operator=
games[0] = "hitman";
相关文章:
- 类动态数组错误
- 如何返回多维数组?错误C2440
- 数组错误(不允许类型不完整)
- C++ 将文件读取到数组错误:'operator>>'不匹配
- 不断增加的指针数组 错误:赋值中的类型不兼容
- 从文本文件读取 2D 数组错误
- 动态结构数组错误
- 旋转数组 - 错误
- 按字母顺序排序名称,数组错误
- 因为每个循环都读取数组错误
- 二维数组错误
- C 获取数组错误
- 编译时出现字符串数组错误
- c++2维指针类数组错误(使用openframework)
- C++数组错误
- C++上数组错误的大小
- C++数组错误:访问冲突读取位置0xC0000005
- c++2D数组错误
- C++:为“char [4]”数组错误获取太多初始值设定项
- 分段错误(核心转储)排序字符串数组错误