🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: de.comp.lang.c++
Article #710

Re: Schlechte Eingabemethode?

#710
From: Uwe Behrens
Date: Thu, 02 Nov 1995 14:29
74 lines
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!uwe
References: <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