gpt4 book ai didi

c++ - 如何将 vector 转换为 char* arr[]?

转载 作者:行者123 更新时间:2023-11-28 04:05:11 24 4
gpt4 key购买 nike

最近想把vector转成char* array[]。

所以我找到了解决方案。但这不是安全的方式..

这是我的代码

char** arr = new char* [4];

vector<string> vv;

// setting strings
for (int i = 0 ;i < 4; i++)
{
vv.emplace_back("hello world");
}
// convert
for (int i = 0; i < 4; i++)
{
arr[i] = new char[vv[i].size()];
memcpy(arr[i], vv[i].c_str(), vv[i].size());
}

// prints
for (int i = 0; i < 4; i++)
{
cout << arr[i] << endl;
}

// output
// hello world羲羲?솎솨
// hello world羲羲拂솽솨
// hello world羲羲
// hello world羲羲?펺솨

// delete memorys
for (unsigned index = 0; index < 4; ++index) {
delete[] arr[index];
}

delete []arr;

为什么会发生字符串崩溃??没有安全的方法了吗?

最佳答案

当您使用memcpy 时,arr[i] 不保证是一个以null 结尾的字符串。将 arr[i] 视为空终止字符串,如

cout << arr[i] << endl;

导致未定义的行为。


您需要做一些小改动。

  1. 再分配一个字节的内存。
  2. 使用 strcpy 代替 memcpy
arr[i] = new char[vv[i].size() + 1];
strcpy(arr[i], vv[i].c_str());

关于c++ - 如何将 vector<string> 转换为 char* arr[]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58849657/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com