fread Lese-Fehler
lima-city → Forum → Programmiersprachen → C/C++ und D
all
array
beispiel
code
datei
einlesen
einzelnen zeichen
ersetzen
file
flag
folgendes problem
funktion
hilfreiche antworten
machen
null
passieren
problem
puffer
string
umgehen
-
Ich möchte gerne eine binäre Datei einlesen, Source-Code dazu:
char* KeyFile( HWND hWnd ) { char szFilePath[MAX_PATH]; uint64 FileSize; char *szBuffer; FILE *File; OPENFILENAME ofn; ZeroMemory(&ofn, sizeof(OPENFILENAME)); ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = hWnd; ofn.lpstrFile = szFilePath; ofn.nMaxFile = sizeof(szFilePath); ofn.lpstrFilter = "All\0*.*\0"; ofn.nFilterIndex = 1; ofn.lpstrFileTitle = NULL; ofn.nMaxFileTitle = 0; ofn.lpstrInitialDir = NULL; ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; if ( GetOpenFileName(&ofn) == TRUE ) { File = fopen( szFilePath , "rb" ); if ( File == NULL ) return ""; fseek ( File , 0 , SEEK_END ); FileSize = ftell( File ); rewind ( File ); szBuffer = (char*)malloc( sizeof(char)*FileSize ); if (szBuffer == NULL) return ""; if( fread(szBuffer, 1, FileSize, File) != FileSize ) return ""; fclose( File ); } return szBuffer; }
Nun funktioniert alles soweit prima, doch leider liest er (scheinbar?) nur die ersten Bytes einer Datei ein.
Bspw. wird bei einer Portable Executable (.exe) nur das "MZ" des Headers eingelesen.
Hoffe auf hilfreiche Antworten!
MfG -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ich konnte dies soweit erstmal lösen...
Inzwischen bereitet mir die binäre Null allerdings einige Probleme.
Als Beispiel habe ich ein Char-Array und dieses enthält die Zeichenfolge "\n". Diese wird nun als Steuerzeichen interpretiert.
Gibt es eine Funktion, die Steuerzeichen automatisch entschärft, also aus dem "\n" ein "\\n" macht?
MfG
Beitrag zuletzt geändert: 2.12.2009 18:06:13 von sw1tch -
Meine C-Zeit liegt leider lange hinter mir.
Du kannst mit einer Ersetzen-Funktion (strreplace?)
alle'\' -Zeichen durch '\\' ersetzen. -
Ja, das wäre eine Möglichkeit.
Ich bin nochmal ordentlich mit dem Debugger durch den Code gestept und nun offenbart sich mir folgendes Problem:
Ich habe eine Verschlüsselung geschrieben die Zufallswerte zwischen 0 und 255 generiert und diese dann mit jedem einzelnen Zeichen des zu verschlüsselnden Strings XORed (Idee einer OTP-Verschlüsselung).
Nun kann es durchaus passieren, dass der User beispielsweise 'Z' (Ascii-Wert ist 90) eingibt und die Verschlüsselung dazu als Wert ebenfalls 90 generiert. XORed man nun beide Werte erhält man als binären Wert 0000 0000, also den "Null Character", der einen String terminiert und damit beendet.
Ich suche nach einer Möglichkeit, diesen Null Character irgendwie zu umgehen oder seiner Funktion zu berauben...
Es ist leider nicht möglich, dass ich den Character irgendwie ersetzen könnte oder so, da meine Verschlüsselung ja jeden ASCII-Wert generieren könnte...
MfG -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage