You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何无法用循环读取char数组输入?代码异常问题咨询

问题分析与解答

代码核心问题与cin行为解释

先看你提供的代码:

#include<iostream>
#include<string>
using namespace std;
int main()
{
    int size; char str[size]; cin>>size;
    for(int i=0; i<size; i++)
    {
        cin>>str[i];
    }
    return 0;
}

你期望输入size=10时读取10个输入,但实际行为不符合预期,根源和解决方式如下:

1. 数组定义顺序错误导致的未定义行为

C++标准不支持变长数组(VLA)(仅部分编译器如GCC将其作为扩展支持),更严重的是你在定义char str[size]时,size还未被初始化,此时size是随机的垃圾值,数组大小完全不确定。这会导致:

  • 若数组实际大小小于10,循环写入会越界破坏内存,引发程序崩溃、输入读取异常等不可预测的行为;
  • 若数组实际大小远大于10,后续可能会读取到额外的输入内容,和你预期的10次读取不符。

正确的写法是先读取size,再创建动态数组(推荐用标准库的vector替代非标准变长数组):

#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main()
{
    int size; 
    cin>>size;
    vector<char> str(size); // 标准C++动态数组,大小由size决定
    for(int i=0; i<size; i++)
    {
        cin>>str[i];
    }
    return 0;
}

2. cin的输入行为说明

修正数组问题后,cin>>str[i]的行为是明确的:

  • >>运算符会自动跳过所有空白字符(空格、换行、制表符等),只读取非空白的单个字符;
  • 只要你输入的非空白字符数量足够,循环会准确读取size个字符,不会多读取。你之前遇到的“读取多个输入”,本质是数组大小随机导致的内存异常,并非cin本身的问题。

内容的提问来源于stack exchange,提问作者Prakhar Arora

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 18:56:01