C++如何通过指针修改数组值 逗号拆分输入存入数组首元素无输出问题
问题原因分析
- 数组下标使用错误:拆分逻辑中直接用原字符串的遍历下标
i作为数组的存储下标,比如输入a,b,第一个逗号出现在原字符串索引为1的位置,会把第一个拆分结果a存入数组下标1的位置,所以数组下标0的位置始终是空值,自然打印没有输出。 - 遗漏尾部元素:循环结束后没有把最后一个拆分出来的字符串存入数组,因为最后一个元素后面没有逗号,不会触发else分支的存储逻辑。
- 输入读取逻辑问题:
std::cin >> input默认以空格作为分隔符,如果你输入的内容包含空格,只会读取到第一个空格前的内容,建议改用std::getline读取整行输入。 - 空输入越界风险:没有判断输入字符串是否为空,直接访问
input[input.length() - 1]会触发数组越界,导致程序崩溃。
修正后的完整代码
#include <iostream> #include <string> void Seperate(std::string input, std::string(*ptr)[50]) { // 先判断输入是否为空,避免越界 if (input.empty()) { return; } if (input[input.length() - 1] == ',') { input.erase(input.length() - 1, 1); } std::string value; int length = input.length(); // 新增独立的数组存储下标 int arr_idx = 0; for (int i = 0; i < length; i++) { if (input[i] != ',') { value += input[i]; } else { (*ptr)[arr_idx] = value; arr_idx++; value = ""; } } // 循环结束后存入最后一个元素 if (!value.empty()) { (*ptr)[arr_idx] = value; } } int main() { std::cout << "Enter comma seperated values to seperate: "; std::string input; // 改用getline读取整行 std::getline(std::cin, input); std::string list[50]; std::string(*ptr)[50] = &list; Seperate(input, ptr); std::cout << list[0]; }
关键修改说明
- 新增了独立的数组索引变量
arr_idx,每存储一个元素就自增,保证元素从数组下标0开始顺序存储 - 循环结束后补充了最后一个元素的存储逻辑
- 把输入读取改为
std::getline,支持读取带空格的整行输入 - 新增了空输入判断,避免字符串越界访问
- 移除了代码中没有用到的头文件引用,减少编译开销
内容的提问来源于stack exchange,提问作者ihsan
相关产品推荐
相关产品推荐

