char c [100]和char * c之间的差异与cin.getline()

时间:2012-09-08 07:39:36

标签: c++ new-operator getline c-strings

我对cin.getline(char * s,int num_char,char delim)有一些疑问;

有什么区别:

char c[100];  
cin.getline(c,100,'\n');  

char *c = new char[100]; //this is the correct form I want to show you 
cin.getline(c,100,'\n');  

我只知道一件事,第二件不起作用:-)

4 个答案:

答案 0 :(得分:3)

您的第二个代码段是语法错误。像这样可以工作

char *c = new char[100];  
cin.getline(c,100,'\n');

两者之间的区别在于,在第二种情况下,内存是动态分配的。这有两个效果,首先不会自动销毁数组,第一个例子是当你退出声明的函数时,数组会自动被销毁。第二个效果是除非你用delete[]销毁数组你有内存泄漏。足够的内存泄漏,您的程序将崩溃。

根据您希望销毁阵列的时间,在功能结束时自动选择所需的版本,或者使用delete[]进行选择时,选择所需的版本。当然,你应该使用std::string

答案 1 :(得分:0)

C ++不允许您通过cingetline直接在字符指针中输入。如果要在动态分配的cstring中获取输入,首先在静态char数组中输入并使用strcpy()将数据复制到char指针。

请在此处查看我的回答 getline(cin,_string);

答案 2 :(得分:0)

如果您使用

getchar()

gets()

返回值将是char *。 有时因缓冲区不干净而出现问题 所以用以下方法清理它:

cin.ignore()

答案 3 :(得分:-1)

当你通过引用传递c时,

为一个,而在第二种情况下,c作为指针传递。

第二种情况与:

相同
char c[100];
Char *p = &c;
cin.getline(p,100,'\n');