-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');  

私が知っていることは1つだけです.2つ目は機能しません:-)

4

4 に答える 4

3

2 番目のコード スニペットは構文エラーです。このように動作します

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

2 つの違いは、2 番目のケースではメモリが動的に割り当てられることです。これには 2 つの影響があります。まず、配列は自動的に破棄されません。最初の例では、配列が宣言された関数を終了すると、配列は自動的に破棄されます。2 番目の影響は、配列を破棄しない限りdelete[]、メモリ リークが発生することです。 . 十分なメモリ リークが発生すると、プログラムがクラッシュします。

関数の最後で自動的に配列を破棄する場合、または を使用してそう言った場合に基づいて、必要なバージョンを選択しますdelete[]。もちろん、実際には を使用する必要がありますstd::string

于 2012-09-08T07:48:09.480 に答える
0

cinC++ では、またはを介し​​て、文字ポインターで直接入力を取得することはできませんgetline。動的に割り当てられた cstring で入力を取得する場合は、最初に静的 char 配列で入力を取得し、それを使用strcpy()してデータを char ポインターにコピーします。

ここで私の答えを参照してください getline(cin,_string);

于 2012-09-08T07:41:22.333 に答える
0

使用する場合

getchar()

また

gets()

戻り値は char* になります。バッファがクリーンでないために問題が発生することがありました。
だからそれをきれいにしてください:

cin.ignore()
于 2012-09-08T07:49:34.470 に答える
-1

1 つは c を呼び出すときに参照によって渡され、2 番目のケースでは c がポインターとして渡されます。

2 番目のケースは次と同じです。

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