in allokoierten Speicher schreiben.
-
Hallo,
also hier noch mal der Code wie er funktioniert, ich kann genau BUF zeichen eigeben, dann beendet sich das Programm. Nun, ich bin mir aber nicht sicher, ob ich wirklich das allokoierte Feld benutze, oder einfach nur das aus der Schleife nehme, wenn i < BUF; i++
das er dann solange i kleiner BUf ist zeichen entgegen nimmt.:#include <iostream> using namespace std; const int BUF = 4; class Window { private: string str, *p; public: Window(){ p = new string[BUF]; } ~Window(){ delete [] p; } void WriteTOp (); }; void Window::WriteTOp() { for ( int i = 0; i< BUF; i++ ) { char ch; cin >> ch; cout << p[i]; } }; Window ewin; int main() { Window ew; ew.WriteTOp(); }
-
In deiner schleife läuft folgendes ab:
- erzeugen eine Variable
- einlesen eines zeichens und abspeichern in ch
- ausgeben des i ArrayelementsDazu folgendes:
1. erzeuge die Char Variable außerhalb der Schleife! Gleicht der Kompiler das nicht aus hast du nämlich eine mehrfachdeklaration drin(!) -> Fehler beim kompilieren.2. Das was du eingibst wird jeweils beim nächsten schleifendurchlauf verworfen. Ich weis nicht ob du das wirklich bezwecken willst, aber es erscheint mir als unlogisch.
3. p ist leer. du gibst zwar den inhalt aus, speicherst aber nie was rein. Erscheint mir wie ein logikfehler.
Beschreib doch nochmal genauer was deine Methode tun soll.
-
Jo,
da geb ich THE_FreaK recht, denke dass du eigentlich so ne Schleife haben wolltest:
for ( int i = 0; i< BUF; i++ ) { cin >> p[i]; cout << p[i]; }
mfg
v R
-
Okay ich versuche mal zu erklären, was ich vorhabe.
Ich will mir Speicher reservieren, zum testen erstmal nur ein Feld von 10.
Das Feld ist ein String[BUF], da ich ganze Sätze in den Speicher laden will.
Ich stelle mir das so vor, ich veranschauliche das mal:string[0] | Hallo Welt <ENTER> string[1] | Hallo Universum <ENTER> ...
und das genau 10 mal, bis das Feld dann voll ist.
Ich will mir mit Hilfe des reservierten Speichers eine kleine Enviroment basteln, in der, der Benutzer, einen Text eingeben kann, später will ich noch eine Funktion implementieren, dass, wenn der Speicher voll ist, die Eingabe des Users gespeichert wird.
-
Okay ich versuche mal zu erklären, was ich vorhabe.
Ich will mir Speicher reservieren, zum testen erstmal nur ein Feld von 10.
Das Feld ist ein String[BUF], da ich ganze Sätze in den Speicher laden will.
Ich stelle mir das so vor, ich veranschauliche das mal:string[0] | Hallo Welt <ENTER> string[1] | Hallo Universum <ENTER> ...
und das genau 10 mal, bis das Feld dann voll ist.
Ich will mir mit Hilfe des reservierten Speichers eine kleine Enviroment basteln, in der, der Benutzer, einen Text eingeben kann, später will ich noch eine Funktion implementieren, dass, wenn der Speicher voll ist, die Eingabe des Users gespeichert wird.
-
soo?
#include <iostream> using namespace std; #define BUF 10 class Window { private: string str; string *p[BUF]; public: Window(){ for ( int i = 0; i< BUF; i++ ) { p[i]=new char*[256]; } ~Window(){ delete [] p; } void WriteTOp (); }; void Window::WriteTOp() { for ( int i = 0; i< BUF; i++ ) { cin >> p[i]; cout << p[i]; } }; Window ewin; int main() { Window ew; ew.WriteTOp(); }
-
SaM-UR schrieb:
soo?
Ganz sicher nicht!
Augenblick noch, ich Debugge das grad mal/EDIT:
#include <iostream> using namespace std; #define BUF 10 class Window { private: char *p[BUF]; // siehe 1. public: Window(){ for(int i=0; i<BUF; i++) p[i] = new char[256];}; // siehe 1. und 2. ~Window(){ delete[] p; }; void WriteTOp (); }; void Window::WriteTOp() { for ( int i = 0; i< BUF; i++ ) { cin.getline(p[i],256); // 4. cout << p[i] << endl << endl; } }; Window ewin; int main() { Window ew; ew.WriteTOp(); return 0; // Kann man auch weglassen ist aber schöner wenns dortsteht *dasfind* }
Sodelle. Was hab ich geändert?
1. Du hattest einen pointer auf ein String objekt erzeugt, aber später versucht daran ein Char Array zuzuweisen! Das geht so nicht. nimmst du aber einen pointer auf ein char , dann gehts (s.o.)
2. Desweiteren waren im Ctor die klammern leicht falsch
3. und wenn du strings verwenden willst musst du auch <string> mit includieren.
4. hier hab ich mal cin.getline() draus gemacht, damit lassen sich später besser fehler abfangen, weil du nicht wie bei nem String den Vorteiol hast, dass du beliebigviele Zeichen reinspeichern kannst sonder nur für die, für die du auch speicher reserviert hast
So wies oben steht läuft das Programm (habs getestet)
-
string *p[BUF];
public:
Window(){ for ( int i = 0; i< BUF; i++ ) {
p[i]=new char*[256];
}
~Window(){ delete [] p; }was hat 'string' mit 'char *' zu tun?
Warum 'new char *[]'? Die erste Dimenstion haste doch schon festgelegt
Das 'delete[]p' muesste IMHO in ne Schleife und dann sollte es so aussehen:for (int i = 0; i < BUF; ++i) delete[]p[i];
Oder verwechsle ich hier was?
mfg
v R
-
Hallo, ihr macht meinen Code zjowmina. MEIN Code ist die Vorgabe, ihr sollt ihn nur richten. Also nichts mit Char sondern String, nichts mit #define sondern const int
und so fort.
-
Checkerro schrieb:
Hallo, ihr macht meinen Code zjowmina. MEIN Code ist die Vorgabe, ihr sollt ihn nur richten. Also nichts mit Char sondern String, nichts mit #define sondern const int
und so fort.Nanana immer scjön freundlich bleiben! Wir müssen dir ja nicht helfen!