fread char*



  • ich möchte mit fread gern ein char* einlesen.
    fread(mCharObj, sizeof(char*),1,file)
    geht natürlich nicht, aber weil ich weiß nicht wie lang das char ist und deswegen tue ich mir ein bisschen hart *gg*
    ich brauch das ganze zum laden ein milkshape files:
    die ms3d joint struct sieht ja so aus:

    struct SMs3dJoint
    	{
    		uchar flags;
    		char name[32];
    		char parentName[32];
    		float rotation[3];
    		float translation[3];
    		char* numRotationKeyframes;
    		char* numTranslationKeyframes;
    
    		SMs3dKeyframe *keyFramesRot;
    		SMs3dKeyframe *keyFramesTrans;
    	};
    

    und ich müsste eben "numRotationKeyframes" und "numTranslationKeyframes" einlesen und weiß nicht wie ...

    cu,
    basc



  • Wenn die Struktur binär abgespeichert ist, kannst doch einfach die komplette Struktur einlesen:

    fread(buf, sizeof(struct SMs3dJoint), 1, fp);



  • @interpreter, nicht ganz. sizeof funktioniert hier nicht, da die Struktur ja einigen Zeiger enthält. Damit bekommst du zwar die Zeigergrößer jedoch nicht die Daten. Am einfachsten wäre es ja in den ersten paar Bytes der Datei die Größe der Struktur stehen würde.

    @basc_temp, du kannst jetzt folgendes machen. Du liest numRotationKeyframes Zeichen für Zeichen aus der Datei. Sobald du ein Null-Byte ausliest, hast du das Ende des Strings erreicht. Oder du pufferst einen ganzen Block und suchst dann in den gepufferten Daten nach dem String-Terminator.

    Beispiel:

    int iChr;
    int iSet = 0;
    FILE *pFd = ...
    /* Größe je nach Bedarf wählen */
    char numRotationKeyframes[256];
    ...
    /* die ersten Elemente einlesen */
    ...
    /* nun numRotationKeyframes */
    do
    {
      iChr = fgetc( pFd );
      numRotationKeyframes[iSet++] = iChr;
    }
    /* Auf Terminator prüfen */
    while ( iChr );
    


  • Herrmann schrieb:

    @interpreter, nicht ganz. sizeof funktioniert hier nicht, da die Struktur ja einigen Zeiger enthält.

    Hast recht. Ich sollte um halb 4 Uhr nachts nicht mehr posten 🙄



  • danke!!
    aber gibts da echt keine "schönere" lösung?


Anmelden zum Antworten