【问题标题】:can I write character array ch[n] instead of ch[10] [duplicate]我可以写字符数组 ch[n] 而不是 ch[10] [重复]
【发布时间】:2021-07-25 05:53:11
【问题描述】:

在我的 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;
    }

【问题讨论】:

  • 可变长度数组 (VLA) 不是 C++ 语言的一部分,尽管一些编译器支持它们作为扩展:Variable Length Array (VLA) in C++ compilers。但是你为什么在 C++ 中使用 C 风格的字符串 - 只需使用 std::string
  • // 你可以考虑使用动态内存 .... char* s = new char[n]; cout

标签: c++


【解决方案1】:

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

#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 的信息 in here

【讨论】:

    【解决方案2】:

    正如评论中提到的,在 C++ 中,您不能创建可变长度数组。这就是说,还有很多其他方法可以解决这个问题。最简单的方法是使用完成所有数据分配工作的std::string。如果您的情况需要您使用char 数组,您可以为数组分配一些内存:char * s = new char[n];。这将创建一个指向可以存储n 字符的内存位置的指针。

    【讨论】:

    • 而且,总的来说,如果您需要一个动态大小的T[] 用于某种类型的T,那么std::vector&lt;T&gt; 是正确的解决方案。 new T[] 几乎从来都不是你真正想要的。
    • 或者,使用malloc
    猜你喜欢
    • 2016-09-18
    • 2019-05-16
    • 1970-01-01
    • 1970-01-01
    • 2013-12-09
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    • 2017-02-17
    相关资源
    最近更新 更多