使用 c_str() 设置字符数组
Setting a char array with c_str()?
char el[3] = myvector[1].c_str();
myvector[i]
是一个包含三个字母的字符串。为什么会出现此错误?
它返回类型 char*,它是指向字符串的指针。您不能将其直接分配给这样的数组,因为该数组已经为其分配了内存。尝试:
const char* el = myvector[1].c_str();
但是,如果字符串本身被销毁或更改,则非常小心,因为指针将不再有效。
因为const char *
不是数组的有效初始值设定项。更重要的是,我相信c_str
返回一个指向内部存储器的指针,因此存储起来不安全。
您可能希望以某种方式(memcpy
或std::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;
如果可能的话,适合您的情况。
相关文章:
- 提升区域设置规范化带状字符,但不规范化重音
- 将十六进制值设置为用于填充的字符变量时出现问题
- 注册表正在设置 1 个字符
- 是否有任何区域设置会影响宽字符编码?
- 我如何处理有关输入的字符串大小超过字符数组设置大小的错误?
- 以字符为单位设置控制台大小
- 将终端设置为原始模式:仅在按下下一个键后显示字符
- 将字符数组设置为彼此相等的方法不起作用
- 在无符号字符数组中设置无符号短字符
- 通过比较字符设置字符串时出现问题
- 无法使用 Unicode 特殊字符设置窗口文本
- 使用无符号字符设置文本格式
- 有没有办法为 TAB 字符(反斜杠 t)"t"设置特定数量的最大空格数C++?
- 如何将单个字符转换为为基本密码哈希器设置整数,C++
- 使用 getCurrentDirectoryW 不读取非区域设置字符
- 获取一些设置字符后的下一行
- 如何获取/设置字符数组
- 如何在c++中设置字符
- 如何从标准字符串 (c_str()) 中设置字符 * 值不起作用
- 使用 c_str() 设置字符数组