Teilstring um ein paar Zeichen nach vorne schieben.



  • Hallo Leute,

    könntet Ihr mir nochmal helfen? Ich habe mit malloc einen String erstellt. Nun möchte ich die ersten Zeichen aus diesem String entfernen. Wenn ich den Zeiger einfach etwas nach vorne rutschen lasse wäre mein Problem gelösst. Das Problem wäre doch dann aber den Speicher wieder frei zu geben, oder? Da doch free() den original zurueckgegebenen Pointer von malloc() erwartet oder? Gibt es also eine einfache Funktion die den String einfach um ein paar Zeichen nach vorne verschiebt? Momentan gehe ich ueber einen Buffer und kopiere dann die Sachen an die richtige Stelle zurück. Ist mir aber alles ein bißchen zu blöd....

    Viele Grüße

    Frederik



  • memmove kann ohne zusatzbuffer kopieren.



  • Hallo Volkard,

    vielen Dank für den Tip.

    Viele Grüße

    Frederik



  • @Frederik
    Eine andere Möglichkeit wäre noch gewesen einfach einen zweiten Zeiger zu deklarieren, auf die entsprechende Stelle zu setzen und dann damit weiterzuarbeiten.



  • AJ schrieb:

    @Frederik
    Eine andere Möglichkeit wäre noch gewesen einfach einen zweiten Zeiger zu deklarieren, auf die entsprechende Stelle zu setzen und dann damit weiterzuarbeiten.

    ein zweiter zeiger wäre einfach zu unhandlich, den jedesmal mitübergeben zu müssen.
    meine lösung für lange strings, wo man oft abschlippelt:

    //wie immer ungetestet
    char* mallocMagicString(size_t size)
    {
       char* str=(char*)malloc(size+1);
       *str='\0';
       return str+1;
    }
    void freeMagicString(char* str)
    {
       --str;
       while(*str!='\0')
          --str;
       free(str);
    }
    

    dann könnte man fein sich nen string anlegen mit

    char* str=mallocMagicString(13);
    

    ihn vollmachen mit

    strcpy(str,"autoexec.bat");
    

    den anfang abschnippeln

    while(*str!='.')
      ++str;
    ++str;
    printf("die dateinamenerweiterung war %s",str);
    

    und ihne trotzdem sauber löschen

    freeMagicString(str);
    


  • @volkard
    Und du meinst wirklich das haut so hin?? 😮

    Es kommt ja auch immer darauf an was man machen will. Allerdings verstehe ich nicht was gegen einen zweiten Zeiger spricht, aber egal.


Anmelden zum Antworten