使用 c_str() 设置字符数组

Setting a char array with c_str()?

本文关键字:设置 字符 数组 str 使用      更新时间:2023-10-16
char el[3] = myvector[1].c_str();

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

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

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

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

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

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

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

或者,只需从矢量访问它:

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

如果可能的话,适合您的情况。