char el[3] = myvector[1].c_str();
myvector[i]
是一个包含三个字母的字符串。为什么会出现这个错误?
它返回类型 char*,它是指向字符串的指针。您不能将它直接分配给这样的数组,因为该数组已经分配了内存。尝试:
const char* el = myvector[1].c_str();
但是如果字符串本身被破坏或更改,则要非常小心,因为指针将不再有效。
因为 aconst char *
不是数组的有效初始化程序。更重要的是,我相信c_str
会返回一个指向内部存储器的指针,因此存储起来并不安全。
您可能想以某种方式(memcpy
或std::copy
其他方式)复制该值。
除了其他人所说的之外,请记住,长度为三个字符的字符串在转换为 c_str 时需要四个字节。这是因为必须为字符串末尾的 null 保留一个额外的字节。
C++ 中的数组必须知道它们的大小,并在编译时提供初始化程序。c_str() 返回的值只有在运行时才知道。如果 e1 是一个 std::string,它可能应该是,就不会有问题。如果它必须是 char[],则使用 strcpy 填充它。
char el[3];
strcpy( e1, myvector[1].c_str() );
这假定字符串 myvector[1] 最多包含两个字符。
只需创建字符串的副本。然后,如果您需要以 char* 的形式访问它,就这样做。
string el = myvector[1];
cout << &el[0] << endl;
如果不需要修改字符串,请将其设为 const。如果需要,请在 'el' 上使用 c_str()。
或者,只需从向量中直接访问它:
cout << &myvector[1][0] << endl;
如果可能的话,你的情况。