如果在编译时不知道大小,这是否被认为是在固定char数组上的动态分配?我的老师说:“在C ++中你不能分配一个可变长度的固定数组。你必须动态分配固定的arr 2.列出项目
如果在编译时不知道大小,请注意。“如果在编译时不知道n的大小,如何动态分配固定的char数组?我试过两个例子。我不知道不知道是否正确。
#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
}
它打印没有空格的字符串。我不能在这里打印空格。这并不显示白人。
2)
int main() {
char *ch=new char;
std::cout<<"enter a string\n";
std::cin.getline(ch,255);
std::cout<<ch<<'\n';
delete[]ch;
ch=nullptr;//c++11 is accepted ## Heading ##
std::cout<<" after null pointer:"<<ch;
}
如果在编译时不知道大小,那么它被认为是在固定char数组上动态分配的?或者它们都不正确?
答案 0 :(得分:1)
第一个是关于&#34; C ++&#34;中的动态数组分配是正确的。它看起来有点奇怪,但它会做。
只是为了提出一个有效的观点:
char *
是正确的new char[ size ];
分配也是正确的。因为这会使您的数组在运行时固定大小。 (除非你删除并以不同的尺寸重新创建它)答案 1 :(得分:1)
你的第一个例子是正确的,第二个例子只为一个你不想要的char
分配内存。
但是,如果你想要一个没有已知编译时间长度的动态数组,那么你应该使用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();