首页 > 解决方案 > 我可以写字符数组 ch[n] 而不是 ch[10]

问题描述

在我的 c++ 代码中,我想写字符数组 s[n] 而不是写 s[10]。其中 n 是 size 是数组,它由用户在运行时给出。但它不接受输入。它只需要n,而不是字符串。

我得到了这样的输出,

输入尺寸:10

输入字符串:

细绳 :

    #include<iostream>
    #include<cstring>
    using namespace std;

    int main()
    {
       int n;
       cout<<"Enter size : ";
       cin>>n;
       char s[n];
       cout<<"Enter String : \n";
       cin.getline(s,n);
       cout<<"String : \n";
       int l=strlen(s);
       cout.write(s,l);
       return 0;
    }

标签: c++

解决方案


cin.ignore()可用于修补您的问题,如本文所述:

#include<iostream>
#include<cstring>
using namespace std;

int main()
{
    int n;
    cout<<"Enter size : ";
    cin>>n; n++;
    char s[n];
    cout<<"Enter String : "; cin.ignore();
    cin.getline(s,n);
    cout<<"String : ";
    cout.write(s,n);
    return 0;
}

结果:

Enter size : 10
Enter String : 1234567890
String : 1234567890

*注:跑进来Code::Block 20.03, g++ version 6.3.0, Windows 10, 64 bit

但是,正如上面提到的评论,VLAs 或Variable Length Array(s)不是C++ 标准的一部分,尽管 g++编译器clang++支持它们。

正如@Kevin Pastor 所指出的,最简单的方法是使用std::string它来完成所有数据分配工作。

样本:

#include<iostream>
#include<string>
using namespace std;

int main()
{
    string s; cout << "Your string: ";
    getline(cin, s);
    cout << "String: " << s;
}

样本输出:

Your string: 1234567890
String: 1234567890

更多关于 VLA的信息在这里。


推荐阅读