warum geht diese fopen function nicht?
-
char *LoadFileToObj(char* file, HWND wind) { char *buffer = NULL; FILE *topen; if((topen = fopen(file, "rb")) != NULL) { int fileSize = ftell(topen); fread(buffer, sizeof(topen), fileSize, topen); MessageBox(wind, buffer, "buffer", 0); fclose(topen); return buffer; } fclose(topen); return "error - could not read file!"; }wenn die datei nicht vorhanden-> memory read error, sonst buffer leer

was machich falsch?
-
char *LoadFileToObj(char* file, HWND wind) { char *buffer = NULL; //das ist nur ein zeiger kein buffer in den du was einlesen kannst FILE *topen; if((topen = fopen(file, "rb")) != NULL) { int fileSize = ftell(topen); //nach dem öffnen steht der auf dem dateianfang was wohl 0 sein dürfte fread(buffer, sizeof(topen), fileSize, topen); //du versuchst hier 0 zeichen in einen charpointer einzulesen guck dir nochmal die doku zu fread an //fread(buffer, sizeof(char), sizeof(buffer), topen); und buffer als char-array und nicht nur als pointer verwenden MessageBox(wind, buffer, "buffer", 0); //wenn du das als string ausgeben willst musst du den buffer nullterminieren also ggf ein zeichen weniger einlesen fclose(topen); return buffer; //wenn du den buffer so zurcükgeben willst wird das nicht funktionieren wenn du einen statischen buffer anlegst den müssest du schon dynamisch in dieser funktion allokieren was ich dir nicht empfehlen würde, übergib am besten einen poitner auf einen ausserhalb der funktion allokierten buffer und dessen grösse } fclose(topen); return "error - could not read file!"; }
-
alsooo
char *LoadFileToObj(char* file, HWND wind) { FILE *topen; if((topen = fopen(file, "rb")) != NULL) { int fileSize = ftell(topen); char buffer[100]; fread(buffer, sizeof(char), sizeof(buffer), topen); MessageBox(wind, buffer, "buffer", 0); fclose(topen); return buffer; } fclose(topen); return "error - could not read file!"; }so gehts, aber wie kann ich die buffer grösse auf die dateigrösse anpassen?
-
Mit der Funktion
DWORD GetFileSize( HANDLE hFile, // handle of file to get size of LPDWORD lpFileSizeHigh // address of high-order word for file size );die Dateigröße auslesen und den Buffer danch mit der ausgelesenen Anzahl Bytes erstellen.
Mfg.
-
--------------------Konfiguration: test - Win32 Debug--------------------
Kompilierung läuft...
main.cpp
D:\Programme\C++ files\MSDev98\MyProjects\test\main.cpp(90) : error C2057: Konstanter Ausdruck erwartet
[...]
test.exe - 4 Fehler, 1 Warnung(en)der wert muss doch konstant sein?!
-
Einen Pointer kann man nciht in einen nciht-Pointer konvertieren. Aber man kann den Pointer so bahandeln als wäre er keiner indem man ihn dereferenziert.
Der Dereferenzierungsoperator ist dieses "*", das du zu hassen scheinst

Also sagen wir mal...int* pInt = 0; //Pointer wird erstellt int a = 5; //Integer variable wird erstellt pInt = &a; //dem Pointer wird die adresse von a übergeben. int b = *pInt; //dem integer b wird der Wert übergeben, auf den der Pointer zeigt, d.h. den er referenziert(repräsentiert). //mit dem dereferenzierungsoperator vor dem Pointernamen kann man direkt auf den Wert zugreifen auf den er zeigt. if(b==a) Beep(222,2222); //Hier sollte es Beeeeepen....Mfg.
-
An die anderen:
Denkt nciht der Tolga schreibt Mist! (hehe..)
Er hat seine Farge geändert:Zuletzt bearbeitet von pixartist am 19:47:17 20.06.2004, insgesamt 1-mal bearbeitet
-
danach hab ich granicht gefragt

-
@Pixarzist:
Nie wieder versuch ich dir zu helfen. Um zu lernen wie man Pointer dereferenziert (hoffe inzwischen sagt dir das Wort was) solltest du dir
'C++ für Dummies' aus der Stadtbib. leihen und lesen.. da wird das so erklärt das du es verstehn könntest.
-
och ... jetzt sei doch nicht beleidigt
das war doch nicht ernst gemeint, und ich finds nett wie du und andere einem hier helfen 
edit: btw. die smileys symbolisieren ironie

-
ftell() liefert dir nur die aktuelle Position des Dateizeigers zurück!
Nach dem Öffnen einer Datei ist der Zeiger normalerweise am Anfang und ftell() liefert 0.
Du solltest vorher mit fseek() den Dateizeiger auf das Ende setzen, dann ftell() aufrufen und dann wieder mit fseek() an den Anfang setzen!Oder du benutzt die WinAPI-Datei-Funktionen:
CreateFile() zum Datei öffnen
GetFileSize() zum Dateigröße holen
ReadFile() um was aus der Datei zu lesen
CloseHandle() um die Datei wieder zu schließen...
-
... und dann musst du eben new verwenden, um den Speicher zu reservieren

-
char *LoadFileToObj(char* file, HWND wind) { FILE *topen; if((topen = fopen(file, "rb")) != NULL) { int fileSize; fseek(topen, 0, SEEK_END); fileSize = ftell(topen); if(fileSize!=0) { char *buffer; buffer = new char[fileSize-4]; fseek(topen, 0, SEEK_SET); fread(buffer, 1, fileSize, topen); MessageBox(wind, buffer, "buffer", 0); fclose(topen); return buffer; } } return "error - could not read file!"; }so klappts! die -4 hab ich durch ausprobieren, kann sie mir aber nicht erklähren!
-
seltsam! Was kommt denn, wenn du -4 nicht mit angibst?
-
allokier mal ein zeichen mehr und setzte das letzte dann auf 0 damit du nen nullterminierten string hast
-
wenn ich die -4 weglasse hab ich 4 y's mit ´drüber hinten am string
-
-
ZeroMemory(buffer, fileSize); oder was? dann löscht er ja alles raus oO wie krieg ich denn dieses scheiss anhängsel da weg?
-
Das musst du natürlich vor dem Auslesen machen - direkt nachdem du dir den Speicher reserviert hast

-
ups ja klar
*paddel*