char Array leeren
-
Gudn,
ich habe ein char array mit x Buchstaben gefüllt und möchte mir nach einander aus diesem Array immer weniger Buchstaben in ein zweites Array holen.
Allerdings ist das zweite Array immer gleich voll.
int i, j; int laenge = 0; int menge = 10; char buchstabe = 90; char str1[30] = ""; char str2[30] = ""; for(j=0;j<menge;j++){ str1[j]=buchstabe; str1[j+1] = '\0'; buchstabe--; printf("String1 -> %s <-\n",str1); } for(i=menge;i>0;i--){ strncpy(str2,str1,i); laenge = strlen(str2); str2[laenge] = '\0'; printf("String2 -> %s <-\n",str2); str2[0] = '\0'; printf("String2 -> %s <-\n",str2); }
Die Ausgabe:
String1 -> Z <-
String1 -> ZY <-
String1 -> ZYX <-
String1 -> ZYXW <-
String1 -> ZYXWV <-
String1 -> ZYXWVU <-
String1 -> ZYXWVUT <-
String1 -> ZYXWVUTS <-
String1 -> ZYXWVUTSR <-
String1 -> ZYXWVUTSRQ <-
String2 -> ZYXWVUTSRQ <-
String2 -> <-
String2 -> ZYXWVUTSRQ <-
String2 -> <-
String2 -> ZYXWVUTSRQ <-
String2 -> <-
String2 -> ZYXWVUTSRQ <-
String2 -> <-
String2 -> ZYXWVUTSRQ <-
String2 -> <-
String2 -> ZYXWVUTSRQ <-
String2 -> <-
String2 -> ZYXWVUTSRQ <-
String2 -> <-
String2 -> ZYXWVUTSRQ <-
String2 -> <-
String2 -> ZYXWVUTSRQ <-
String2 -> <-
String2 -> ZYXWVUTSRQ <-
String2 -> <-Die letzen zwei Zeilen sollen dafür da sein den string2 zu leeren, wie man sieht ist er auch leer, allerdings werden anstatt i elemen te aus string1 wieder alle reinkopiert.
Jemand eine Idee was ich falsch mache?
-
strncpy(str2,str1,i); laenge = strlen(str2); str2[laenge] = '\0';
wie du bereits richtig erkannt hast, wird durch strncpy die Zeichenkette nicht automatisch Null-terminiert. Von daher solltest du dich nicht die Länge über strlen ermitteln, da diese ja nie verändert wird.
strncpy(str2,str1,i); str2[i] = '\0';
wäre da erfolgversprechender. (ungetestet)
-
Vielen Dank!
String1 -> Z <-
String1 -> ZY <-
String1 -> ZYX <-
String1 -> ZYXW <-
String1 -> ZYXWV <-
String1 -> ZYXWVU <-
String1 -> ZYXWVUT <-
String1 -> ZYXWVUTS <-
String1 -> ZYXWVUTSR <-
String1 -> ZYXWVUTSRQ <-
String2 -> ZYXWVUTSRQ <-
String2 -> ZYXWVUTSR <-
String2 -> ZYXWVUTS <-
String2 -> ZYXWVUT <-
String2 -> ZYXWVU <-
String2 -> ZYXWV <-
String2 -> ZYXW <-
String2 -> ZYX <-
String2 -> ZY <-
String2 -> Z <-