使用c_str()设置char数组?

时间:2011-05-07 08:10:37

标签: c++ arrays char c-str

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

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

5 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

您可能希望以某种方式复制该值(memcpystd::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;

如果可能的话。