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