charwerte setzten



  • Hi zusammen,.

    habe ein char-Array,
    Jetzt möchte ich dieses Array mit Strings, füllen.
    Ich habe aber Berieche innerhalt des Array.
    Grenzen:
    Zeichen 0-2 = String1;
    Zeichen 3-20 = String2;
    Zeichen 21-30 = String3;

    char budderNeu[30];
    

    Wie kann ich das realisieren?

    danke Bench



  • Hallo

    😕
    Du kannst mittels strncpy C-Strings kopieren. Wenn die genannten Grenzen fest sind ist das doch kein Problem. Wenn die Grenzen variabel sind must du dir noch ein Trennzeichen festlegen.

    Aber warum ein C-String? Nimm lieber AnsiString.

    bis bald
    akari



  • Hi,
    ok können auch Ansistrings sein.
    Ich erläutere mal meine Problem, in welchem ich den Zusammenhang brauche.
    Also Habe mir eine kleine ID3-Klasse gebaut und das einlesen funktioniert über einen FileStream auch wunderbar.

    Ich lese die letzten 128 Bits der Datei ein und speichere sie in einem CharArray!
    Dann verklaube ich diese und zeige sie in einem jeweilgen Textfeld an.
    Jetzt möchte ich quasi den Inhalt aus dem jeweiligen Textfeld auslesen und die passenden letzten 128 Bits mit den neuen Werten überschreiben.

    Die Bits sind folgendermaßen definiert:
    ID = Copy(buffer,0,3);
    Titel=Copy(buffer,3,33); // ID3 Tags auslesen
    Artist=Copy(buffer,33,63);
    Album=Copy(buffer,63,93);
    Year=Copy(buffer,93,97);
    Comment=Copy(buffer,97,127);
    Genre=(unsigned)Copy(buffer,127,128).c_str();

    Das einlesen so funktioniert auch wunderbar.
    Blos zum speichern brauch ich ja ein neues Bufferarray um die neuen werte in einem neuen 128 Bit Arry wieder zu speichern.
    In diesem Array stehen ja dann die Infos drin. Dann möchte ich die letzen 128 Bits der datei mit dem neuen Array überschreiben.

    Habe es mir folgendermaßen gedacht:

    //Bufferwerte mussen gesetzt werden
      fsw = new TFileStream(mp3,fmOpenWrite);
      fs->Seek(-128,soFromEnd);
      //Hier wird das BufferWriteArray mit den passenden Stellen aus den Textfeldern gefüllt
    //Jetzt sollten die letzten 128 bits der Datei überschrieben werden
      fs->Write(bufferWrite,128);
    

    Ok, jetzt habe ich dir mal mein Vorhaben erzählt...! 😃

    Cih hoffe du verstehst es!

    Weiss gar nicht ob das überhaupt so geht, wie ich das vorhabe!?

    Wäre um deine Hilfe sehr dankbar!!

    Bench



  • Am besten, du legst dir eine Struktur an.
    Dann kannst du die gesamte Struktur am Stück einlesen und abspeichern.

    struct ID3
    {
      char ID[3];
      char Titel[33];
      char Artist[63];
      ...
    };
    
    ID3 id3;
    
    fs->Read(&id3, sizeof(ID3));
    
    strncpy(id3.ID, "42", sizeof(ID3.ID));
    strncpy(id3.Title, "super duper", sizeof(ID3.Title));
    // ...
    
    fs->Write(&id3, sizeof(ID3));
    

    Überprüf nach Anlegen der Struktur aber sicherheitshalber, ob sizeof(ID3) wirklich 128 ist - ansonsten müßtest du noch #prgama pack(1) davorschreiben (such mal nach Alignment/Ausrichtung).



  • Nochmal:
    Warum char-Arrays? Nimm AnstString oder std::string, dann sparst du dir die Kopiererei mit strncpy und auch sonst ist alles einfacher.


Anmelden zum Antworten