.| Autor | Beitrag |
|---|---|
|
000 30.08.2002, 13:56 snoopdog |
Hi, als owen ncih die beiden Funktion verwende um ne normale Text Datei einzulesen, kommt nur mist also íííííííýýýý das ist dei ausgabe warum??
Visit our 500er Gamer Lan |
|
Profil || Suche |
|
001 30.08.2002, 15:34 Archangel |
uuuhhhhmmm.. ich WEIß zwar nich, wie das mit ReadFile is, aber ich denke nich das die funktion einen ptr auf einen char-ptr erwartet, also da buffer ein zeiger is, müsste nur buffer (ohne address-operator) da stehen, wär buffer ein array, würde beides gehen. es müsste also so aussehen:
alternative kannst du buf auch mit memset(buf, 0, sizeof(buf)); 'nullen' -- |
|
Profil || Suche |
|
002 30.08.2002, 16:53 [RMen]OneStone |
memset(buf, 0, sizeof(buf)); Uaaah, da läuft es mir kalt den Rücken runter. sizeof ist nun wirklich nicht gerade geeignet um die Länge eines Arrays herrauszufinden (ich behaupte nicht, dass es nicht geht). Stell dir mal vor, du machst später ne dynamische initialisation via malloc / new und da ist noch dein sizeof(...) (was dann 4 entspricht) - Supa! --georg-wicherski@pixel-house.net | http://www.pixel-house.net/ - Coding Resource| http://www.google.de/ |
|
Profil || Suche |
|
003 30.08.2002, 17:59 snoopdog |
hmm nur hab ich es so, das er mir zwar den inhalt ausgibt aber immenroch diese blöden zeichen da hinmacht, nu is die ausgabe die, halloíííííí hallo steht übrigens in meiner datei udn heir der code
Visit our 500er Gamer Lan |
|
Profil || Suche |
|
004 30.08.2002, 18:33 Archangel |
ich sag nur '\0'... -- |
|
Profil || Suche |
|
005 30.08.2002, 19:12 TheTinySteini |
OneStone: was denn? memset in Verbindung mit sizeof ist eine völlig legitime und oft angewandte Methode, um einen Speicherplatz mit z.B. Nullen zu füllen. Gut, bei per new u.ä. initialisierten Arrays hat man dann ein Problem. Aber darum geht's in dem Fall ja auch gar nicht. Man kann ja nicht Äpfel mit Birnen vergleichen. TheTinySteini |
|
Profil || Suche |
|
006 30.08.2002, 19:54 Kriz |
Und für alle Neugierigen, die nicht wissen, wie man die Länge eines Arrays in C/C++ berechnen kann:
sizeof(array) berechnet die Gesamtsumme aller Elemente in Bytes, sizeof(array[0]) berechnet die Anzahl der Bytes des Elements [0] im Array. Teilt man nun die Gesamtsumme durch die Größe eines einzelnen Elements, erhält man die Anzahl der Elemente in dem Array. In diesem Fall käme für length die Zahl 17 raus =) Das funktioniert aber nur direkt. Die Berechnung der Arraylänge als Bestandteil einer Funktion funktioniert nicht:
Anstatt des gesamten Arrays wird nämlich nur der Startzeiger des Arrays an die Funktion übergeben und der ist auf modernen CPUs immer 4 Bytes groß (32 Bit Adresse). Die Funktion würde z.B. auf Win32 Systemen daher 1 zurückgeben (4 / 4 = 1) anstatt 17 (68 / 4 = 17). --K:R-I)Z++ |
|
Profil || Suche |
|
007 30.08.2002, 23:23 Tron |
memset mit new[] ist voelliger quatsch, da new[] automatisch fuer jedes element den standardkonstruktor aufruft, was bei nativen typen dem setzen von 0 entspricht, also waere das dann doppelgemoppelt. auf malloc geh ich garnet ein, das is c... --'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams 'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett |
|
Profil || Suche |
|
008 30.08.2002, 23:54 Archangel |
naja in C kann man sich ja auch ne eigene alloc funktion schreiben, die den allokierten speicherbereich mit memset auf 0 setzt, dann isses auch komfortabler sachen wie outofmemory oso zu handhaben.. @OneStone: tja, man sollte wissen was man tut.. ausserdem wenn du n ptr hast übergibst du ja an sizeof auch nichmehr das array, sondern den zeiger auf das erste element des arrays.. @Tron('s sig): pratchett r0x :D besonders gevatter tod (wobei die wachen-bücher auch rocken) -- |
|
Profil || Suche |
|
009 31.08.2002, 08:25 snoopdog |
aah,also waren diese komsichen zeichen einfach nur das nullterminat oder wie des heißt, hättet irh ja auhc gleich sagen können *g*, aber trotzdem danke!! --Visit our 500er Gamer Lan |
|
Profil || Suche |
|
010 31.08.2002, 10:16 Tron |
nein, da hat einfach nur der terminator ('\0') gefehlt. so hat die messagebox einfach weiter datenmuell ausgegeben bis sie zufaellig auf '\0' gestosen ist. um das problem zu loesen schreib einfach an das ende ein '\0', die position kannst ja einfach ueber die anzahl der gelesenen bytes bestimmen. btw: schmeiss den ganzen winapi-kram zum zugriff auf dateien in die tonne und benutz filestreams (header "fstream.h", ofstream, ofstream, fstream) <ot> 'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams 'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett |
|
Profil || Suche |
|
011 31.08.2002, 11:33 Hessie J. |
*wegedit weil schon gesagt* --Dieser Beitrag wurde am 31.08.2002 um 11:34 von Hessie J. bearbeitet. |
|
Profil || Suche |
|
012 31.08.2002, 16:12 theDon |
jaja *gg* -- \o tanz den naziprau! o/ And more than ever, I hope to never fall, |
|
Profil || Suche |

