[C++] Datei einlesen. Problem mit dem Pointerparameter

Quidoff

Lieutenant
Registriert
Feb. 2005
Beiträge
897
Hallo an alle Programmierer,
ich spiele gerade etwas mit dem Einlesen von Dateien mithilfe der Windows API herum und habe da ein Problem, was wohl eher mit Pointern zu tun hat.

Aber hier erstmal der Code:
Code:
#include <iostream>
#include <windows.h>
#include <conio2.h>
using namespace std;

HANDLE hFile;
bool readFile(char* filename, char* strFileContent);

int main() {
    char *buffer;

    if(readFile("readme.txt", buffer)) cout << buffer;
    
    getch();
    return 0;
}

bool readFile(char* strFileName, char* strFileContent) {
    bool success = false;

    hFile = CreateFile(strFileName, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
    if(hFile != INVALID_HANDLE_VALUE) {
             DWORD dwFileSize;
             dwFileSize = GetFileSize(hFile, NULL);
             
             if(dwFileSize != 0xFFFFFFFF) {
                           strFileContent = new char[dwFileSize+1];
                           
                           if(strFileContent!=NULL) {
                                               DWORD dwRead;
                                                                                            
                                               if(ReadFile(hFile, strFileContent, dwFileSize, &dwRead, NULL)) {
                                                                  strFileContent[dwFileSize] = '\0';
                                                                  //cout << strFileContent;
                                                                  success = true;
                                               }                                       
                           }
             }
    }
    
    
    CloseHandle(hFile);
    return success;    
}
Ich will also nichts weiteres machen, als den Inhalt der "readme.txt" (Datei existiert) in der Konsole anzeigen zu lassen. Leider bekomme ich beim Starten einen Laufzeitfehler, der das Programm beendet.
Zeile, die den Fehler verursacht: cout << buffer;
Irgendwie wird der Inhalt nicht in buffer gespeichert oder wieder verworfen, denn wenn ich die auskommentierte Zeile wieder einkommentiere, dann sehe ich den Inhalt der readme.txt bevor das Programm abstürzt.

Bestimmt ist der Fehler lächerlich, aber ich sitze jetzt schon lange daran und finde ihn nicht.
 
main bekommt nicht mit, dass der Zeiger sich ändert, weil der Zeiger per Value übergeben wird. Übergib ihn als char*& strFileContent, dann sollte es gehen. (Gelesen : strFileContent ist eine Referenz auf einen Zeiger auf Character)


Ansonsten sieht der Code gut aus. Hab zwar die WinAPI Doku nicht zur Hand, aber sollte okay sein. Das delete zum new fehlt noch, aber für ein Beispielprogramm ist das ja erstmal nicht tragisch. :)
 
Zuletzt bearbeitet:
Oh richtig. Parameter sind ja auch nur lokale Variablen, wenn man sie nicht als Referenz definiert. Ein peinlicher Anfängerfehler.

Danke, funktioniert bestens.
 

Ähnliche Themen

Zurück
Oben