将 C++ 字符串存储到 char* 向量中
storing a c++ string into a char* vector
我正在尝试将此字符串存储到指针向量中。这只是代码的起点。最终,向量将存储用户键入的单词,如果矢量没有单词,则将其添加到矢量中,或者显示单词已在矢量中。
我尝试使用 strcpy((,但后来它告诉我使用 strcpy_s((。所以我现在做了,现在它每次都崩溃而没有错误。有人可以让我了解这里发生的事情吗?
vector<char*> wordBank;
string str;
cin >> str;
wordBank[0] = new char[str.length() + 1];
strcpy_s(wordBank[0], str.length() + 1 , str.c_str() );
cout << wordBank[0];
delete[] wordBank[0];
我不会考虑vector<char*> wordBank;
这个 c++ 代码,而是考虑恰好使用一些C++功能的 C 代码。
C++的标准库可以让您的生活更轻松。您应该改用std::vector<std::string>
。
vector<string> wordBank;
wordBank.push_back(str);
它避免了所有指针的东西,所以你不需要做内存管理(这是一个很好的理由去掉指针(。
对于strcpy_s
,它是一个更安全的strcpy
版本,因为你必须明确指定目标缓冲区的大小,这可以避免在复制过程中缓冲区溢出。
但是,strcpy_s
是非标准的和特定于 MS 的,除非您只想在 MSVS 上编译代码,否则切勿使用strcpy_s
。请改用std::copy
。
vector
的默认大小为 0
因此这条线
vector<char*> wordBank;
仅定义 0 大小的字符指针vector
正如人们在评论中提到的,您可以使用以下 2 个选项之一:-
vector<char*> wordBank(1);
或
wordBank.push_back(...);
向量中不需要char*
元素。您可以改用string
,并使用push_back()
将字符串附加到向量中,这将分配所需的空间:
vector<string> wordBank;
string str;
cin >> str;
wordBank.push_back(str);
cout << wordBank[0];
这将使您免于每次要从向量中删除字符串时都必须使用delete
的负担。基本上,您永远不必在任何事情上使用delete
,为此,您应该避免使用new
分配内存。在这种情况下,这意味着避免使用new char[/*...*/]
,这反过来意味着您应该使用string
来存储字符串。
vector<char*> wordBank;
构造一个空向量。因此,使用operator[]
的wordBank[0]
具有未定义的行为,因为您正在越界访问。
返回对指定位置处的元素的引用。 不执行边界检查。
您可以使用push_back
添加新元素,如下所示:
wordBank.push_back(new char[str.length + 1]);
当然,最明智的做法是只使用vector
strings
vector<string> wordBank;
wordBank.push_back(str);
您正在尝试手动管理字符串的内存,而std::string
类旨在为您执行此操作。
此外,从您描述的用例来看,您可能希望查看std::map
和/或std::set
。这是一个教程。
- 在<uint8_t> <char> c++ 中将常量向量转换为常量向量
- 封送处理 - 转换 std::向量<char>到字符串^ 反之亦然
- 如何使用 std::move() 将 char[] 移动到向量<char>
- 将 C++ 字符串存储到 char* 向量中
- 为什么此代码无法将字符push_back到向量中<char>?
- 如何从向量转换为<char>数字整数
- 通过其char键对对象指针的C 向量进行排序
- 优化将标准::uint32_t插入到标准::向量<char>中
- C++:如何将 char 变量分配给向量<char>并访问该向量的元素进行比较?
- 如何在一个表达式中将 char[] 转换为向量<char>(可移植)
- 从字符* 高效实例化向量<char>
- 标准::向量<char>到标准::字符串
- 将二进制文件读入向量<char>读取小于完整文件
- C++:将无符号长整整转换为向量<char>,反之亦然
- 将不同类型的数据存储到一个向量<char>中?
- C++:将向量<char>转换为双精度
- [ 性能]--- 字符串::运算符+= 与向量<char>push_back
- 将向量<char>作为参数,然后转换为字符串
- 如何转换std::vector<无符号字符>到向量<char>而无需复制
- 从向量<char>创建最长的字符串