C++ 使用c_str()设置字符数组?

C++ 使用c_str()设置字符数组?,c++,arrays,char,c-str,C++,Arrays,Char,C Str,myvector[i]是一个包含三个字母的字符串。为什么会出现此错误?因为常量char*不是数组的有效初始值设定项。此外,我相信c_str会返回指向内部内存的指针,因此存储起来不安全 你可能想以某种方式复制值( MeMCPY 或 STD::复制< /代码>或其他内容)。C++中的“< /P> < P>数组必须知道它们的大小,并在编译时提供初始化器。c_str()返回的值仅在运行时已知。如果e1是一个std::字符串(可能应该是这样),那么就不会有问题。如果它必须是char[],则使用strcpy

myvector[i]
是一个包含三个字母的字符串。为什么会出现此错误?

因为
常量char*
不是数组的有效初始值设定项。此外,我相信
c_str
会返回指向内部内存的指针,因此存储起来不安全


你可能想以某种方式复制值(<代码> MeMCPY 或 STD::复制< /代码>或其他内容)。C++中的“< /P> < P>数组必须知道它们的大小,并在编译时提供初始化器。c_str()返回的值仅在运行时已知。如果e1是一个std::字符串(可能应该是这样),那么就不会有问题。如果它必须是char[],则使用strcpy填充它

char el[3] = myvector[1].c_str();

这假设字符串myvector[1]最多包含两个字符。

它返回char*类型,这是指向字符串的指针。不能直接将其分配给那样的数组,因为该数组已经分配了内存。尝试:

char el[3];
strcpy( e1, myvector[1].c_str() );

但如果字符串本身被破坏或更改,则要非常小心,因为指针将不再有效。

除了其他人所说的以外,请记住,长度为三个字符的字符串在转换为c_str时需要四个字节。这是因为必须为字符串末尾的null保留一个额外的字节。

只需创建该字符串的副本即可。然后,如果您需要以char*的形式访问它,只需这样做

const char* el = myvector[1].c_str();
string el=myvector[1];

不仅当字符串被销毁时,指针也将在字符串被更改时失效。
std::copy(myvector[1]。begin(),myvector[1]。begin()+3,e1)
不需要任何假设@Nawaz它假定OP不希望结果以null结尾。
string el = myvector[1];
cout << &el[0] << endl;
cout << &myvector[1][0] << endl;