c++ - 我可以写字符数组 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;
}
解决方案
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
。
但是,正如上面提到的评论,VLA
s 或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的信息在这里。
推荐阅读
- node.js - 如何在 Node.js 中通过 Postfix 邮件服务器发送消息?
- java - 如何更改 2d ArrayList 中某些 ArrayList 的大小?
- arrays - 在kotlin中将字符串类型转换为ByteArray
- java - 对象之间的 Java OOP 功能
- python - 创建消息收件箱(来自 Django 模型)?
- ios - 使用搜索栏时调用中的额外参数
- laravel - 即使驱动程序设置为 bcrypt,哈希函数也会检查 argon2id
- vue.js - 如何将一个组件用于不同的路径,并为此组件加载不同的数据?
- javascript - 循环遍历元素并从孩子那里获取价值
- amazon-web-services - 将大文件上传到 AWS S3 时出现 TaskCanceledException