Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 19:38

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[C++]Array ist größer als angegeben

Discussion on [C++]Array ist größer als angegeben within the C/C++ forum part of the Coders Den category.

Closed Thread
 
Old   #1
 
Che's Avatar
 
elite*gold: 120
Join Date: Aug 2010
Posts: 7,448
Received Thanks: 2,756
[C++]Array ist größer als angegeben


Jo hab n kleines Problem:
Code:
//Dateigroesse rausfinden

char sTemp;
       int lFileSize = 0;
       fstream f;
       f.open("C:/test.dat", ios::in);
        while(!f.eof())
         {
        f.read(&sTemp, 1);
        lFileSize++;
         }
//1 abziehen (letztes Zeichen ist whitespace)
        lFileSize--;
//Groesse des Arrays cstring setzen        
    char *cstring = new char(lFileSize);
//lFileSize ausgeben = 3
cout << lFileSize << endl;
//Groesse des Arrays cstring ausgeben = 4 ?!?
    cout << sizeof(cstring) << endl;
gibt mir zurück:
Quote:
3
4
Der Inhalt der Datei test.dat ist 3 Zeichen lang (Inhalt: abc) aber mein Array cstring ist anstatt 3 Zeichen 4 Zeichen lang

Ich raffs nicht wirklich, da lFileSize ja eigentlich nicht 4 ist, sondern 3. Da ich später die Datei einlese und den ASCII-Wert jedes Zeichens ausgeb kommt es spätestens dann zu Fehlern.
Was mach ich falsch?!?


€dit:
Ich Idiot
Jetzt auch draufgekommen, dass ich die größe eines Arrays auf das ich zeige so nicht auslesen kann, bitte closen!
Che is offline  
Old 11/01/2011, 17:19   #2
 
Xenox3's Avatar
 
elite*gold: 169
Join Date: Jun 2010
Posts: 663
Received Thanks: 1,138
Eine Array braucht immer eine Element mehr als man eigentlich braucht.

Bsp: int Array[3];
Array[0],Array[1],Array[2],Array[3]

Das ist nun eine Array mit 3 Elementen, da man das letzte nicht benutzen darf/kann.
Somit ist die größe eigentlich 4 (3+1) hoffe das ist verständlich

Ansonsten MR Smith it's your turn
Xenox3 is offline  
Old 11/01/2011, 17:30   #3
 
elite*gold: 115
Join Date: Oct 2007
Posts: 9,390
Received Thanks: 12,345
Der sizeof-Operator gibt in deinem Fall die Größe des Pointers an, nicht die Länge des Arrays auf das es zeigt.

sizeof (char *) == 4
(unter der Annahme, dass es sich um ein 32-Bit-System handelt)

Versuchs mal mit strlen.
ms​ is offline  
Thanks
1 User
Old 11/01/2011, 17:39   #4


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,907
Received Thanks: 25,408
Quote:
Originally Posted by Xenox3 View Post
Eine Array braucht immer eine Element mehr als man eigentlich braucht.

Bsp: int Array[3];
Array[0],Array[1],Array[2],Array[3]

Das ist nun eine Array mit 3 Elementen, da man das letzte nicht benutzen darf/kann.
Somit ist die größe eigentlich 4 (3+1) hoffe das ist verständlich

Ansonsten MR Smith it's your turn
Das gilt nur für C-Strings, weil da ein 0-Terminator gebraucht wird.

Was du erklärt hast, ist aber doppelt falsch.

Array[3] gibt es nicht.
Du hast ein Array mit 3 Elementen erstellt, wie du schon sagst.
Da der Index aber bei 0 anfängt, ist es eben von 0 bis 2. Gäbe es noch 3, dann hättest du ja ein Element mehr als gewünscht o.ô

Das was MS gesagt hat stimmt. Sizeof ist ein Operator, der zur Compilezeit aufgelöst wird.
Zur Compilezeit kann der Compiler aber nicht wissen, wie groß der Speicherbereich ist, auf den dein Pointer zeigt. Deshalb gilt es hier für die Größe des Pointers, was 4 Bytes ist.
Die Größe eines Arrays erhälst du nur bei sizeof in Verbindung mit einem Array.
MrSm!th is offline  
Old 11/01/2011, 17:48   #5
 
Che's Avatar
 
elite*gold: 120
Join Date: Aug 2010
Posts: 7,448
Received Thanks: 2,756
Jo danke für die Antworten, Dad hats mir grad auch nochmal erklärt:
Kann die größe des Arrays auf das ich zeige so natürlich nicht rausfinden, besser ist es anstatt mit sizeof direkt mit lFileSize zu rechnen.

Kann geclosed werden!
Che is offline  
Old 11/01/2011, 17:50   #6


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,907
Received Thanks: 25,408
#closed
MrSm!th is offline  
Thanks
1 User
Closed Thread


Similar Threads Similar Threads
Suche HipHop/Rap-Songs wie angegeben
06/03/2011 - Music - 0 Replies
huhu Erstens sollen die songs auf englisch sein, und diesen Stil haben: http://www.youtube.com/watch?v=9HrIBqgTLfs danke vielmals für jeden post PS: es dürfen gerne auch gerade die interpreten angegeben werden ;)
Größer werden!
05/07/2011 - WoW Exploits, Hacks, Tools & Macros - 4 Replies
Guten Morgen. Ich habe gestern Abend was witziges gefunden. Geht wie folgt vor: 1. o. Essen/Usen. 2. Auf (Gildenlevel 25) aufmounten 3. wegklicken Das ganze ist nicht nur auf eurem Bildschirm so.Es können von 3 Leuten 2 dich so sehen.
Alles größer O.o
07/10/2010 - Off Topic - 9 Replies
Hi, Ich habe eben mein Notebook angeschaltet und sehe alles größer Ó.Ò Sprich Desktop: Hintergrund, Symbole, Symbol-Namen Internet, Wenn ich die Starttaste drücke: Alles groß -.- Wie löse ich es?
metin2.us in der rangliste sind nur 50 spieler angegeben
01/09/2010 - Metin2 - 7 Replies
bei metin2 us sind jeweils nur 50 spieler angezeigt heist das metin2 us hat nur 100 spieler oder was? und weis einer wie viele spieler der us server so ca. hat.



All times are GMT +1. The time now is 19:39.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.