首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以不写ch[10]而写字符数组ch[n]吗

可以不写ch[10]而写字符数组ch[n]吗
EN

Stack Overflow用户
提问于 2021-05-03 00:00:06
回答 2查看 80关注 0票数 0

在我的c++代码中,我想写字符数组sn,而不是写s10。其中n是大小是数组,它是由用户在运行时给出的。但它不接受输入。它只接受n,而不是string。

我得到了这样的输出,

输入大小: 10

输入字符串:

字符串:

代码语言:javascript
复制
    #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;
    }
EN

回答 2

Stack Overflow用户

发布于 2021-05-03 00:17:56

正如在this post中提到的,cin.ignore()可用于修补您的问题

代码语言:javascript
复制
#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;
}

结果:

代码语言:javascript
复制
Enter size : 10
Enter String : 1234567890
String : 1234567890

*注:在Code::Block 20.03, g++ version 6.3.0, Windows 10, 64 bit中运行。

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

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

示例:

代码语言:javascript
复制
#include<iostream>
#include<string>
using namespace std;

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

示例输出:

代码语言:javascript
复制
Your string: 1234567890
String: 1234567890

有关VLA的更多信息in here

票数 5
EN

Stack Overflow用户

发布于 2021-05-03 00:09:16

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67358428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档