2017-02-07 17 views
-2
char ** ptr = new char *[3]; 
ptr[0] = new char [5]; 
ptr[1] = new char [6]; 
ptr[2] = new char [7]; 

cout<<"Enter first array: "; 
cin.getline(ptr[0], 5); 
cin.getline(ptr[1], 6); 
cin.getline(ptr[2], 7); 
for (int i=0; i<3; i++){ 
    cout<<ptr+i<<endl; 
} 
for (int i=0; i<3; i++){ 
    delete[] ptr[i]; 
} 

を宣言し、それは次のような出力が得られます。ポインタが動的に

Enter first array: name 
    0xf99c20 
    0xf99c28 
    0xf99c30 

私は実際にプリントアウトしたユーザの入力を求めていました。

どうすればいいですか?

+1

のErr ...へのソリューション? – WhiZTiM

+1

'*(ptr + i)'と同じ 'ptr [i]'を印刷したかったでしょう。ところで、ループの最後の 'delete [] ..'にもかかわらず、まだ漏れがあります。あなたの文字列のニーズに 'std :: string'を優先し、配列に' std :: vector 'が必要です – WhiZTiM

+0

1.何の解決策? 2.コードの最後に '[ptr'を削除する必要があります。 3. 'char * ptr [3]'を宣言することもできます(割り当てたり削除するのではなく)。 4.あなたがしようとしていることは、もっと簡単で、より良く、より正確なやり方があります。 –

答えて

0

ptr+iのタイプはchar**であり、char*ではないため、ポインタとして印刷されています。それを文字列として出力するには、char*ptr[i]を使用します。

つまり、std::vector<std::string>を使用してください。その後、string version of std::getlineを使用できます。そして、あなたはまた


など、ユーザー入力のラインの異なる数を扱う、長いユーザー入力を扱う、newdeleteをアップ一致する多くの可能性のある問題、リークを避けるため、あるものの使用を再考してくださいしばしば悪い習慣とみなされます:using namespace std;endl(説明へのリンクです)。

*(ptr+i) 

:あなたはptr+iを印刷するとき

+0

うん、それは働いた!ありがとう! –

+2

@MuhammadIbrahimこれがあなたの問題に対する解決策であれば、答えを受け入れるべきです... –

0

あなたはそれが

ポインタの値を印刷するために使用できるメモリ内にあなたの入力の実際のアドレス位置を与えるポインタの概念の論理誤解を持っていますまたは:

ptr[i] 

getline (char* s, streamsize n);ヌル文字があるため、入力の最大ストリームサイズは大きくする必要があります各文字列と改行文字'\n'の終わりにあなたが別の入力を入力してください:ソリューションへ

cin.getline(ptr[0], 10); 
cin.getline(ptr[1], 10); 
cin.getline(ptr[2], 10); 

リンク: https://ideone.com/maSOSs

関連する問題