我对 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');
我只知道一件事,第二件事不起作用:-)
我对 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');
我只知道一件事,第二件事不起作用:-)
您的第二个代码段是语法错误。像这样会起作用
char *c = new char[100];
cin.getline(c,100,'\n');
两者的区别在于,在第二种情况下,内存是动态分配的。这有两个效果,首先,数组不会自动销毁,在第一个示例中,当您退出声明它的函数时,数组将自动被销毁。第二个效果是,除非您确实销毁了数组,否则delete[]
会有内存泄漏. 足够多的内存泄漏,你的程序就会崩溃。
根据您希望何时销毁数组、在函数结束时自动或在您使用delete[]
. 当然你真的应该使用std::string
.
如果你使用
getchar()
或者
gets()
返回值将是一个 char*。有时由于缓冲区不干净而出现问题。
所以用以下方法清洁它:
cin.ignore()
C++ 不允许您通过cin
或直接在字符指针中进行输入getline
。如果要在动态分配的 cstring 中获取输入,请首先在静态 char 数组中获取输入,然后用于strcpy()
将数据复制到 char 指针中。
在这里查看我的答案 getline(cin,_string);
一种是当你调用 c 时是通过引用传递的,而在第二种情况下 c 是作为指针传递的。
第二种情况与以下相同:
char c[100];
Char *p = &c;
cin.getline(p,100,'\n');