我有关于'new'操作符的简单任务。我需要创建10个字符的数组,然后使用'cin'输入这些字符。应该看起来像这样吗? :
char c = new char[10];
for(int i=0; i < 10; i++)
{
cin >> char[i] >> endl;
}
答案 0 :(得分:9)
没有。试试char* c = new char[10];
。
答案 1 :(得分:5)
char [i]应为c [i]
答案 2 :(得分:4)
无需endl
。并且不要忘记最后的delete []
数组
答案 3 :(得分:2)
char *c = new char[11]; // c should be a pointer.don't forget space for null char.
// do error checking.
cin >> c; // you can read the entire char array at once.
cout<<c<<endl; // endl should be used with cout not cin.
delete[]c; // free the allocated memory.
答案 4 :(得分:2)
由于还没有人完成,我建议你改用std::string
:
std::string word;
std::cin >> word; // reads everything up to the first whitespace
或
std::string line;
std::getline(std::cin,line);
使用std::string
的优点是它会自动扩展,从而消除缓冲区溢出。相反,如果你处理裸字符缓冲区
void f()
{
char buffer[10];
std::cin >> buffer;
//
}
有人出现并输入超过10个字符,如果你运气好的话,整个事情会立刻爆发。 (如果你运气不好,一切似乎都会继续有效,直到稍后出现一些“有趣”的错误,可能是在代码看似无关的部分。)
答案 5 :(得分:1)
更简单的方法可能是:
char * c = new char[11];
cin >> c;
答案 6 :(得分:1)
关闭。
char *c = new char[10];
for(int i=0; i < 10; i++)
{
cin >> c[i];
}
// free the memory here somewhere
更好的是,如果你真的不需要指针......不要使用指针。然后你不必担心内存泄漏。 (必须提到智能指针?)
char c[10];
for(int i=0; i < 10; i++)
{
cin >> c[i];
}
或......正如其他人所提到的......立刻读完整个10个字符。区别在于,此解决方案空间被接受,cin >> c
空格被视为分隔符IIRC。
答案 7 :(得分:1)
char c[10];
cin.get( c, 10 );
答案 8 :(得分:1)
为了解释上面的答案,“char *”就在那里,因为它说“c”变量将是一个指针。你需要它,因为“new”在堆中分配一些内存并返回指向它的指针。 “delete []”运算符用于释放使用new运算符分配的内存,因此它对系统是可用的。方括号表示您将解除分配的指针指向一个数组,而不仅仅是一个大小为sizeof(char)的内存应该被释放,但是有一个数组应该被解除分配。