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

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

4

5 回答 5

5

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

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

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

于 2011-05-07T08:18:43.057 回答
2

因为 aconst char *不是数组的有效初始化程序。更重要的是,我相信c_str会返回一个指向内部存储器的指针,因此存储起来并不安全。

您可能想以某种方式(memcpystd::copy其他方式)复制该值。

于 2011-05-07T08:16:26.597 回答
2

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

于 2011-05-07T08:22:45.930 回答
0

C++ 中的数组必须知道它们的大小,并在编译时提供初始化程序。c_str() 返回的值只有在运行时才知道。如果 e1 是一个 std::string,它可能应该是,就不会有问题。如果它必须是 char[],则使用 strcpy 填充它。

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

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

于 2011-05-07T08:18:34.243 回答
0

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

string el = myvector[1];
cout << &el[0] << endl;

如果不需要修改字符串,请将其设为 const。如果需要,请在 'el' 上使用 c_str()。

或者,只需从向量中直接访问它:

cout << &myvector[1][0] << endl;

如果可能的话,你的情况。

于 2011-05-07T08:30:50.070 回答