C++字符串拆分到数组报错:Exception Thrown/Unhandled问题求助
问题分析与解决方案
你的代码触发异常的核心原因是数组越界访问:
string symbolsArray[]{""};这句定义了一个仅包含1个空字符串的固定大小数组,数组的有效下标只有0。- 当循环中
i ≥ 1时,symbolsArray[i]会访问数组范围外的内存,直接触发内存访问异常。而固定使用symbolsArray[0]时,始终在数组的有效范围内,所以不会报错。 - 另外,
cout << symbolsArray;不会输出数组元素,只会打印数组的内存地址,这不是你想要的效果。
修正方案1:使用动态数组vector<string>存储单个字符的字符串
如果需要将每个字符单独存为string类型元素,用std::vector(C++的动态数组)来替代固定数组,它可以根据输入字符串的长度自动调整大小:
#include <vector> #include <string> #include <iostream> std::string Decrypt(std::string symbols) { int length = symbols.length(); // 初始化能容纳length个元素的vector std::vector<std::string> symbolsArray(length); for (int i = 0; i < length; i++) { // 将单个char转换为string存入数组 symbolsArray[i] = std::string(1, symbols[i]); } // 遍历输出所有元素 for (const auto& elem : symbolsArray) { std::cout << elem << " "; } return ""; }
修正方案2:使用vector<char>存储字符(更高效)
如果只是需要拆分字符,直接用std::vector<char>更节省内存,也更贴合需求:
#include <vector> #include <string> #include <iostream> std::string Decrypt(std::string symbols) { // 直接用字符串的迭代器初始化vector,一步完成拆分 std::vector<char> symbolsArray(symbols.begin(), symbols.end()); // 遍历输出所有字符 for (char c : symbolsArray) { std::cout << c << " "; } return ""; }
额外说明
- C++中固定大小的数组一旦定义,长度就无法修改,完全不适合这种依赖输入长度的场景,
vector是更合适的选择。 - 如果你只是需要访问字符串的单个字符,其实不需要额外拆分:
symbols[i]本身就能直接访问第i个字符,不需要存入额外数组。
内容的提问来源于stack exchange,提问作者Gaming Chair
相关产品推荐
相关产品推荐

