String zeichenweise "befüllen" / erweitern



  • Hallo!
    Ich habe ein Problem und hoffe, dass es lösbar ist:
    Und zwar habe ich einen String (länger als 6), eben ein Char Array, von dem ich die letzten 6 Zeichen in einen String2 verschieben will.
    Folgende Überlegung, String2 zeichenweise aus String zu verschieben, scheiterte leider:

    char string[10];
    char string2[6];
    int laenge = strlen(string);
    int l = 6;
    
    for(int counter = 1; counter <=6 && l!= 0; conter++)
    {
     string2[counter] =  string[laenge - l];
     l--;
    };
    


  • 1. Die Indizes von Arrays fangen in C bei 0 an. Immer.

    2. Welchen Wert soll laenge bekommen, wenn string keinen sinnvollen Inhalt hat?

    3. Ein Vergleich reicht. Die Und-Verknüpfung ist sinnfrei.
    denn string[laenge - 6 + counter] macht es auch ohne l

    4. Kopierst /setzt du nicht den Stringterminator '\0'
    Du hast auch keinen Platz dafür vorgesehen.



  • char string[10];
    char string2[6];
    int laenge = strlen(string);
    int l = 6;
    
    for(int counter = 0; counter <=6 && l!= 0; conter++)
    {
     string2[counter] =  string[laenge - l];
     l--;
    };
    

    Du meinst also so?
    3., das mit dem Vergleich habe ich noch nicht verstanden.



  • 25Alfret schrieb:

    3., das mit dem Vergleich habe ich noch nicht verstanden.

    Wieviel Zeichen willst du kopieren?

    Für counter alleine würde die Schleife 0 1 2 3 4 5 6 zählen.
    Das sind 7 Durchläufe und du greifst auf das Element string2[6] zu, das gar nicht existiert.
    Du machst also einen Durchlauf zuviel. Das kannst du ändern, indem du auf < 6 vergleichst.

    Für l alleine würde die Schleife 6 5 4 3 2 1. Das wäre erstmal ok.

    Du hast jetzt also zwei Tests, die das gleiche bewirken, nämlich die Schleife nach 6 Durchläufen abzubrechen.
    Einer reicht.



  • char string[10] = "abdcef" ;
    char string2[10] = ""; // sollte mindestens die gleiche Größe haben wie string
    
    strcpy( string2, string ); // ist zwar nicht verschoben, aber wenigstens kopiert
    
    printf( "%s", string2 );
    

    EDIT:
    Wenn du deinen Drill-Instruktor richtig vom Hocker hauen willst, benutze inline assembler und

    rep movsb
    

    Geht aber evtl. etwas zu weit. Wäre aber echtes Verschieben.


Log in to reply