Article View: de.comp.lang.c++
Article #710Re: Schlechte Eingabemethode?
From: Uwe Behrens
Date: Thu, 02 Nov 1995 14:29
Date: Thu, 02 Nov 1995 14:29
74 lines
3165 bytes
3165 bytes
In article <5x0NrSGKhjB@kl.in-berlin.de>, kl@kl.in-berlin.de (Kaspar Landsberg) writes:
|> Moin,
Moin,
|>
|> beim Folgenden vermute ich, dass ich recht habe, bin mir jedoch nicht
|> ganze sicher. Daher frage ich lieber mal nach... :-)
Kommt darauf womit Du recht haben willst ...
|>
|> // bsp.cc - kleines Beispielprogramm
|>
|> #include <iostream.h>
|>
|> int main(void)
|> {
|> cout << "\nName: ";
|> char *eingabe = new char; // eingabe zeigt jetzt auf Speicherplatz
|> // von *einem* (1 Zeichen) char-Objekt
|> cin >> eingabe; // Benutzer gibt z.B. "Kaspar" ein (ohne " ")
|> cout << "Ergebnis: " << eingabe << "\n";
|> return 0;
|> }
|>
[ grosses Wundern, warum der Compiler zulaesst, dass mehr als ein Zeichen
eingegeben wird und das Programm die ganze Eingabe ausgibt, obwohl zuwenig
Platz da ist. ]
|> Und nun zur eigentlichen Frage: Der Compiler hat eigentlich fuer eingabe
|> nur Speicherplatz fuer ein Char-Objekt von *einem* Zeichen bereitgestellt.
|> Daher wird doch, falls mehr als ein Zeichen eingegeben wird (z.b.
|> "Kaspar") mehr Speicher benutzt, als eigentlich vom Compiler
|> vorhergesehen, bzw. bereitgestellt, so dass eventuell schon besetzter
|> Speicherplatz einfach durch die Eingabe von "Kaspar" bzw. von "aspar"
|> ueberschrieben wird, oder??
Ja. Das es trotzdem klappt,kann diverse Gruende haben, prompt faellt mir ein:
Es wird nicht ein Byte (char) sondern mehrere (z.B. 8) alloziert
weil das dem Speicherlayout besser entspricht. Dann hast Du eventuell
genug Platz. Portierbar ist das nicht.
Du hast einfach Glueck gehabt. Dort wo cin hingeschrieben hat,
stand einfach nichts wichtiges. Das ist auch nicht portierbar.
Vielleicht gibt's noch andere Gruende? (Spezialisten vor)
|> Wenn ja, dann sollte man also derartige Methoden lieber ganz schnell
|> vergessen, nehme ich kann...
Die Methode, einen Stream in einen Bereich schreiben zu lassen, der die
Daten nicht halten kann, die solltest Du ganz schnell vergessen. Eigentlich
haette Dir die Idee gar nicht kommen sollen ;-)
|> PS Fuer "char *eingabe = new char" haette man (IMO) auch einfach nur
|> "char *eingabe" nehmen koennen.
|>
Das waere wahrscheinlich in (fast) jedem Fall abgestuerzt, was waere wenn
(eingabe == 0) ?
|>
|> Danke,
|>
|> Kaspar
--
_______________________________________________________________________________
Uwe Behrens <behrens@acm.org> (aka <uwe@mevis.uni-bremen.de>)
``Black Holes are where God is dividing by zero.''
Technical Details
Message-ID:
<47akku$99n@p235.informatik.uni-Bremen.de>Path:
arc1-ca.pugleaf.net!mathematik.uni-Bremen.de!uweReferences:
<5x0NrSGKhjB@kl.in-berlin.de>Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!mathematik.uni-Bremen.de!uwe From: uwe@mathematik.uni-Bremen.de (Uwe Behrens) Newsgroups: de.comp.lang.c++ Subject: Re: Schlechte Eingabemethode? Date: 2 Nov 1995 14:29:50 GMT Organization: CeVis, University of Bremen, Germany Distribution: world Message-ID: <47akku$99n@p235.informatik.uni-Bremen.de> References: <5x0NrSGKhjB@kl.in-berlin.de> NNTP-Posting-Host: barclay.mathematik.uni-bremen.de Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit