使用'new'运算符

时间:2010-04-27 07:18:06

标签: c++ operators

我有关于'new'操作符的简单任务。我需要创建10个字符的数组,然后使用'cin'输入这些字符。应该看起来像这样吗? :

char c = new char[10];
for(int i=0; i < 10; i++)
{
    cin >> char[i] >> endl;
}

9 个答案:

答案 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)的内存应该被释放,但是有一个数组应该被解除分配。