2017-02-07 1 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]; 
} 

erklärt Wenn ich diesen Code ausführen, gibt es die folgende Ausgabe:Zeiger auf ein Array von CStrings dynamisch

Enter first array: name 
    0xf99c20 
    0xf99c28 
    0xf99c30 

Ich wollte eigentlich den Eingang Benutzer ausgedruckt.

Könnte mir bitte jemand sagen, wie man das macht?

+1

Err ... Lösung zu? – WhiZTiM

+1

Sie wollten wahrscheinlich 'ptr [i]' drucken, was dasselbe wie '* (ptr + i)' ist. BTW, trotz Ihrer letzten 'delete [] ..' in einer Schleife, haben Sie immer noch ein Leck. Bevorzugen Sie 'std :: string' für Ihre String-Bedürfnisse und' std :: vector 'für Ihr Array benötigt – WhiZTiM

+0

1. Lösung zu was ??? 2. Sie müssen [] ptr am Ende Ihres Codes löschen. 3. Sie können auch 'char * ptr [3]' deklarieren (anstatt es zuzuweisen und zu löschen). 4. Es gibt viel einfachere, bessere und korrektere Methoden, um zu tun, was auch immer Sie versuchen zu tun. –

Antwort

0

Der Typ ptr+i ist char**, nicht char*, so wird nur als Zeiger gedruckt. Um es als Zeichenfolge drucken zu lassen, verwenden Sie ptr[i], die eine char* ist.

Verwenden Sie eine std::vector<std::string>. Dann können Sie die string version of std::getline verwenden. Dann sind Sie mit der Zuordnung von new viele möglichen Probleme vermeiden und delete, Lecks, mit mehr Benutzereingaben zu tun, mit einer unterschiedlichen Anzahl von Zeilen von Benutzereingaben zu tun, usw.


Auch denken Sie bitte Ihre Verwendung von was oft als schlechte Praktiken betrachtet: using namespace std; und endl (das sind Links zu Erklärungen).

+0

ja, es hat funktioniert! Danke Kumpel! –

+2

@MuhammadIbrahim Wenn dies die Lösung für Ihr Problem ist, sollten Sie die Antwort akzeptieren ... –

0

Sie haben Logik Mißverständnis der Zeiger Konzept, wenn Sie ptr+i drucken es wird Ihnen die aktuelle Adresse Standorte Ihrer Eingaben im Speicher

den Wert des Zeigers drucken können Sie verwenden:

*(ptr+i) 

oder:

ptr[i] 

auch getline (char* s, streamsize n); max Strom Größe der Eingänge sollte größer sein, weil es ein null-Zeichen ist '\0' am Ende jeder Zeichenfolgen und Newline-Zeichen '\n', wenn Sie geben Sie einen anderen Eingang:

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

Link zu der Lösung: https://ideone.com/maSOSs