Die ersten Zeichen eines Strings wegmachen



  • Hi, ich möchte die ersten x Zeichen eines Strings entfernen...
    Die letzten kann man ja mit string[10] = '\0'; abtrennen, aber wie werde ich die z.B. die ersten 3 Zeichen los?
    Den Rest möchte ich natürlich behalten, also kann man es ja nicht mit '\0' machen..



  • Beispiel:

    #include <stdio.h>
    #include <string.h>
    int main()
    {
        char meinstring[]="Mein String\n";
    
        puts(meinstring); /*"Mein String"*/
        strcpy(meinstring, meinstring+5);
        puts(meinstring); /*"String*/
        getchar();
        return 0;
    }
    

    Mit "strcpy(meinstring, meinstring+5);" wird der String ab der 5ten Stelle an den Anfang kopiert. In diesem Fall sieht das so aus:
    vorher:
    0 1 2 3 4 5 6 7 8 9 10 11
    M e i n S t r i n g \0

    dann wird ab meinstring[5] bis '\0', also meinstring[11], nach meinstring[0] kopiert:
    0 1 2 3 4 5 6 7 8 9 10 11
    S t r i n g \0 r i n g \0

    puts(meinstring) gibt dann alle eichen bis \0 aus, also "String"
    mfg, loose



  • Ich würde für sowas eher memmove nehmen, da das dafür da ist, wenn sich Bereiche in Arrays überschneiden.



  • kann man nicht einfach den pointer auf ne andere stelle verbiegen?

    char *str = "Mein String";
    str = &str[5];
    


  • thordk schrieb:

    kann man nicht einfach den pointer auf ne andere stelle verbiegen?

    char *str = "Mein String";
    str = &str[5];
    

    ginge nicht sogar

    char *str = "Mein String";
    str += 5;
    


  • Das ist natürlich einfacher, der nachteil ist nur, dass dann Speicherplatz verloren geht.
    Aber, wenn man keine komplexeren Sachen damit anstellen will, dürfte das die einfachste Lösung sein.



  • loose schrieb:

    Das ist natürlich einfacher, der nachteil ist nur, dass dann Speicherplatz verloren geht.
    Aber, wenn man keine komplexeren Sachen damit anstellen will, dürfte das die einfachste Lösung sein.

    jo klar, aber wenn man in nen cstring irgendwo ne 0 reinschreibt, um ihn zu kürzen, hat man auch speicher verschenkt.



  • Man kann sich auch die Startadresse und die Größe des C-Arrays merken.
    Dann kann man Nullen oder sonstwas ohne Ende reinschreiben, es geht nichts flöten. 🙂



  • loose schrieb:

    Das ist natürlich einfacher, der nachteil ist nur, dass dann Speicherplatz verloren geht.

    wieso geht speicherplatz verloren? wenn man mit 'memmove' in einem array von hinten etwas nach vorne schiebt, geht auch 'speicherplatz verloren' 😉
    der vorteil dieser methode ist, dass man's wieder leicht rückgängig machen kann.
    🙂



  • pixartist schrieb:

    thordk schrieb:

    kann man nicht einfach den pointer auf ne andere stelle verbiegen?

    char *str = "Mein String";
    str = &str[5];
    

    ginge nicht sogar

    char *str = "Mein String";
    str += 5;
    

    kommt aufs gleiche raus aber wenn schon, dann nimm bitte nen zweiten pointer, erst recht wenn der speicher dafür dynamisch allokiert wurde.


Anmelden zum Antworten