使用字符串的 c_str() 并分配给 char const*:分配只读位置
Using String's c_str() and assigning to char const*: assignment of read-only location
我的问题是这样的:我有一个指向常量字符指针的常量指针(两个维度都const
的 2D 字符数组(。我需要将 C 字符串分配给这个数组。我有一个std::string
s的std::vector
,我用它来c_str()
来创建c_strings向量。现在我将这些 C 字符串指针分配给这个数组,但我得到
src/rshell.cpp:45:44: error: assignment of read-only location ‘*(c_arr
((sizetype)(((long unsigned int)i) * 8ul)))’
for (int i = 0; i < size1; i++) c_arr[i] = commands.at(i);
这是带有错误的代码
/* Confusing as heck, let me explain!
* char const* means pointer to a constant char
* so char const* const means a const pointer to a const char
* and char const* const* means a const pointer to a const char pointer!
* (Read declarations from right to left to make it make sense -
* char const* = POINTER (*) to a CONST CHAR)
*/
char const* const* c_arr = new char*[size1];
for (int i = 0; i < size1; i++)
c_arr[i] = commands.at(i); // line 38
这是字符串到 C 字符串部分的矢量,如果它有帮助的话。
for (tokenizer::iterator it = parse.begin(); it != parse.end(); it++)
words.push_back(*it);
vector<const char*> commands;
// add string to c_string equiv return vector
for (vector<string>::iterator it = words.begin(); it != words.end(); it++) {
commands.push_back(it->c_str());
}
由于commands
是一个std::vector<const char *>
,表达式&commands[0]
将产生一个const char **
(也称为char const **
(,你可以愉快地将其分配给char const * const *
。因此,除非您真的需要副本,否则您可以选择
char const * const *c_arr = &commands[0];
请注意,这意味着c_arr
实际上只有在commands
存在时才有用(反过来,只要words
中的std::string
对象存在,它实际上才有用(。
相关文章:
- 初始化或分配空字符串文字到指向 C 中的 char 的指针或指向 C++ 中 const char 的指针的原因是什么
- 使用动态分配将 char* 复制到另一个字符**
- 当我尝试通过构造函数分配 char 数组时出现错误
- 分配值时,C++ char* 指针上的前递增与后递增
- 为什么在 c++ 中分配 char 数组元素时,分配的字符会被销毁?
- char p[0]表示自动分配的缓冲区还是安全指针
- 为什么为char指针分配内存不会截断char序列
- 在C++中,从构造函数中将字符串文本分配给成员const char*变量时会发生什么
- 将字符串文本分配给字符*:const_cast<字符 *> 与使用 char 数组
- 如何为const char double指针(使用新的)动态分配内存
- 试图创建动态分配的char数组时的分割故障
- 如何为 char** 类型变量提供适当的值,以便将其分配给字符串变量
- C++ 在类外部分配 char 数组的索引
- 不能将 "const char*" 类型的值分配给类型 "int" 的实体
- char *的C 动态分配
- 将const char * const参数成员分配给新值
- char*在结构内存分配中
- 在struct[]中分配char*指针值(结构成员)的最优化方法
- 推动CUDA分配char *到对象的device_vector
- c++动态内存分配- char*