【发布时间】:2017-02-28 11:15:05
【问题描述】:
如果在编译时大小未知,这是否被认为是在固定 char 数组上动态分配?我的老师说:“在C++中你不能分配一个可变长度的固定数组。你必须动态分配固定的arr 2. 列表项
如果在编译时不知道大小,可以。” 如果在编译时不知道大小,如何动态分配固定字符数组?我尝试了两个示例。我不知道不知道对不对。
#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
}
它打印没有空格的字符串。我不能在这里打印空格。这不显示 whitespce。
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数组上动态分配?
【问题讨论】:
-
char *ch=new char;只分配一个char。std::cin>>ch[i];跳过空格。您可以使用noskipws将其关闭。 -
这就是
std::vector的用途。 -
你不是空终止
ch。 -
酌情使用 std::vector 或 std::string。 C++ 标准中没有提到“固定数组”,所以如果要使用这个术语,请先定义它。固定数组与非固定数组有何不同?
-
在第二个示例中,您在使用
new分配的对象上使用delete[]。这是一个严重的错误;将new与delete和new[]与delete[]配对。
标签: c++