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 <-


Anmelden zum Antworten