-1

我对 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

4 回答 4

3

您的第二个代码段是语法错误。像这样会起作用

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

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

根据您希望何时销毁数组、在函数结束时自动或在您使用delete[]. 当然你真的应该使用std::string.

于 2012-09-08T07:48:09.480 回答
0

如果你使用

getchar()

或者

gets()

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

cin.ignore()
于 2012-09-08T07:49:34.470 回答
0

C++ 不允许您通过cin或直接在字符指针中进行输入getline。如果要在动态分配的 cstring 中获取输入,请首先在静态 char 数组中获取输入,然后用于strcpy()将数据复制到 char 指针中。

在这里查看我的答案 getline(cin,_string);

于 2012-09-08T07:41:22.333 回答
-1

一种是当你调用 c 时是通过引用传递的,而在第二种情况下 c 是作为指针传递的。

第二种情况与以下相同:

char c[100];
Char *p = &c;
cin.getline(p,100,'\n');
于 2012-09-08T07:47:43.237 回答