Eigene Resourcedatei ist nur ein paar Bytes groß



  • Hab jetzt mal mit dem Debugger gecheckt was bei lesen der Dateien zurückgegeben wird. Ich lese ja mit boost Verzeichnisse aus und lese alle Dateien binär ein und will sie dann im Vector speichern. Bei dieser Funktion.

    char* load(std::string file) 
    {
        std::streampos size;
        ifstream in;
        in.open(file, std::ios::binary | std::ios::in | std::ios::ate);
        size = in.tellg();
        char* data = new char[size];
        in.seekg(0, std::ios::beg);
        if (!in.read(data, size))
            std::cout << "Cant open File " << file << std::endl;
        in.close();
        return data;
    }
    

    Steht in dem Returnwert zB bei einer Datei nur das drin -119'\211'
    Sieht für mich nicht so aus, dass er die komplette Datei eingelesen hat. Normal müsste doch viel mehr dadrin stehen.



  • Bennisen schrieb:

    Ich lese ja mit boost Verzeichnisse aus

    Schon mal von boost::serialization gehört?

    Bennisen schrieb:

    Steht in dem Returnwert zB bei einer Datei nur das drin -119'\211'
    Sieht für mich nicht so aus, dass er die komplette Datei eingelesen hat. Normal müsste doch viel mehr dadrin stehen.

    Wenn deine Fehlerbehandlung nicht so kacke wäre, hättest du schon mehr Infos.



  • Woher willst du nachher noch das Ende von char* erkennen?
    Das was du so einliest, wird nicht nullterminiert.
    Gibst du die Ressourcen, die du mit new anlegst überhaupt wieder frei?
    Warum nimmst du nicht einfach einen vector?



  • Ich liebe und hasse ja den Umgangston in fast jedem Forum. Spart euch jede weitere Mühe, weiß noch nicht wie, aber irgendwie kriege ich das hin. Trotzdem danke für bisherige Unterstützung.



  • Och, wir nehmen die Noobs halt gerne mal 'n bisschen hart ran. Aber wirklich nur 'n bisschen!

    Hast du denn die letzten beiden Posts verstanden? Dann müsstest du jetzt schon weiterkommen.



  • Das ist mir alles ehrlich gesagt zuviel aufwand. Ich verwende jetzt einfach das Resourcing von QT.



  • [quote="Bennisen"]

    std::string targetTex = (std::string)argv[2] + "textures.res";
    

    Das halte ich auch für sehr gewagt 😮



  • [quote="DocShoe"]

    Bennisen schrieb:

    std::string targetTex = (std::string)argv[2] + "textures.res";
    

    Das halte ich auch für sehr gewagt 😮

    Warum?



  • Weil argv[2] ein const char* ist und kein std::string . Der C-style cast führt keine Konvertierung aus und verhält sich wie ein reinterpret_cast . Oder etwa nicht?

    Ächz, diese ganzen Sonderfälle machen mich fertig o.O

    Bei einer gültigen Konvertierung verhält sich der C-cast wie ein static_cast , ansonsten eher wie ein reinterpret_cast ?



  • DocShoe schrieb:

    Weil argv[2] ein const char* ist und kein std::string . Der C-style cast führt keine Konvertierung aus und verhält sich wie ein reinterpret_cast . Oder etwa nicht?

    Ächz, diese ganzen Sonderfälle machen mich fertig o.O

    Bei einer gültigen Konvertierung verhält sich der C-cast wie ein static_cast , ansonsten eher wie ein reinterpret_cast ?

    Nein, es wäre wie:

    std::string targetTex = std::string(argv[2]) + "textures.res";
    


  • manni66 schrieb:

    DocShoe schrieb:

    Weil argv[2] ein const char* ist und kein std::string . Der C-style cast führt keine Konvertierung aus und verhält sich wie ein reinterpret_cast . Oder etwa nicht?

    Ächz, diese ganzen Sonderfälle machen mich fertig o.O

    Bei einer gültigen Konvertierung verhält sich der C-cast wie ein static_cast , ansonsten eher wie ein reinterpret_cast ?

    Nein, es wäre wie:

    std::string targetTex = std::string(argv[2]) + "textures.res";
    

    Sicher? Denn das 2. ist was ganz was anderes als das erste.
    Ich glaub kaum dass bei einem (std::string)argv[2] ein std::string constructor aufgerufen wird



  • firefly schrieb:

    manni66 schrieb:

    Bei einer gültigen Konvertierung verhält sich der C-cast wie ein static_cast , ansonsten eher wie ein reinterpret_cast ?
    Nein, es wäre wie:

    std::string targetTex = std::string(argv[2]) + "textures.res";
    

    Sicher? Denn das 2. ist was ganz was anderes als das erste.
    Ich glaub kaum dass bei einem (std::string)argv[2] ein std::string constructor aufgerufen wird

    Doch, das ist so. Hat mich auch schwer verwundert.



  • Ich glaub kaum dass bei einem (std::string)argv[2] ein std::string constructor aufgerufen wird

    Seit wann ist Programmieren eine Glaubensfrage?



  • Doch, es wird ein temporäres Objekt erstellt (bzw nicht, wegen RVO)

    struct Test
    {
    	int anderes[5];
    	int s;
    	Test(int i) : s(i) { std::cout << i; }
    };
    
    Test t = (Test)5;
    t = (Test)6;
    t = Test(7);
    

    Ausgabe:

    567
    


  • wob schrieb:

    Ich glaub kaum dass bei einem (std::string)argv[2] ein std::string constructor aufgerufen wird

    Seit wann ist Programmieren eine Glaubensfrage?

    Komm schon, wob. Solche Kommentare hast du doch nicht nötig 👎


Log in to reply