C++ 如果大小为’;编译时不知道吗?
如果在编译时不知道大小,是否认为这是在固定字符数组上的动态分配?我的老师说:“在C++中,你不能分配一个可变长度的固定数组。你必须动态地分配固定的ARR。 2.清单项目 如果大小在编译时未知,则为“n”。如果大小在编译时未知,如何动态分配固定字符数组?我尝试了两个示例。我不知道这是否正确C++ 如果大小为’;编译时不知道吗?,c++,C++,如果在编译时不知道大小,是否认为这是在固定字符数组上的动态分配?我的老师说:“在C++中,你不能分配一个可变长度的固定数组。你必须动态地分配固定的ARR。 2.清单项目 如果大小在编译时未知,则为“n”。如果大小在编译时未知,如何动态分配固定字符数组?我尝试了两个示例。我不知道这是否正确 #include<iostream> int main() { std::cout<<"enter the length of string\n";
#include<iostream>
int main() {
std::cout<<"enter the length of string\n";
int length;
std::cin>>length;
char *ch=new char[length];
for(int i=0;i<length;i++)
std::cin>>ch[i];
std::cout<<ch;
delete[]ch;
ch=nullptr;//c++11 is accepted
}
#包括
int main(){
标准:coutlength;
char*ch=新字符[长度];
对于(int i=0;i>ch[i];
std::cout第一个关于“C++中的动态数组分配”是正确的。它看起来有点奇怪,但可以
我想提出一个有效的观点:
- 声明为
char*
是正确的
- 通过
new char[size];
进行分配也是正确的。因为这会使您的数组在运行时固定大小。(除非您删除并使用不同的大小重新创建它)
您的第一个示例是正确的,第二个示例只为单个字符分配内存,而您不需要这些字符
但是,如果您想要一个没有已知编译时长度的动态数组,那么您应该使用std::vector
,以简化您的工作,并减少代码出错的可能性:
std::cout<<"enter the length of string\n";
int length;
std::cin>>length;
std::vector<char> ch(length);
for(int i=0;i<length;i++)
std::cin>>ch[i];
ch.push_back('\0');
std::cout<<ch.data();
std::coutlength;
std::向量ch(长度);
对于(int i=0;i>ch[i];
ch.push_back('\0');
std::coutchar*ch=new char;
只分配一个char
std::cin>>ch[i];
跳过空格。您可以使用noskipws
关闭它。这就是std::vector
的用途。您不能以空值终止ch
。请适当使用std::vector或std::string。没有提到在C++标准中,“固定数组”,所以如果你想使用这个术语,首先定义一个固定数组,它是如何与一个非固定数组不同的?在第二个示例中,在一个分配给<代码>新< /COD>的对象上使用<代码> Dele[]/Cuth.To是一个严重的错误;配对<代码>新< /代码>用<代码>删除< /COD>和<代码> NeX[]/Cord> > <代码> >删除[]
。
std::cout<<"enter the length of string\n";
int length;
std::cin>>length;
std::vector<char> ch(length);
for(int i=0;i<length;i++)
std::cin>>ch[i];
ch.push_back('\0');
std::cout<<ch.data();