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 l4. 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 undrep movsb
Geht aber evtl. etwas zu weit. Wäre aber echtes Verschieben.