Verständnisfrage



  • Hallo,

    hätte kurz 'ne Frage bzgl. einer Wertzuweisung der Charactervariablen.
    Dieses codebeispiel ist nur zur Hilfe für mein Verständnis gedacht..
    Der Compiler gibt zwar keine Fehlermeldungen aus, jedoch stürzt das Programm immer ab, wenn ich es starte.

    #include <stdio.h>
    #include <stdlib.h>

    int main()
    {
    char* character;
    char s_letter[26] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};

    for(loop1=1; loop1 < 27; loop1++)
    {
    for(loop2=0; loop2 < 26; loop2++)
    {
    if(feld[loop2] > feld[loop2+1])
    {
    tmp = feld[loop2];

    feld[loop2] = feld[loop2+1];

    feld[loop2+1] = tmp;
    }
    }
    }
    //Warum funktioniert das Programm nicht mehr wenn diese schleife eingefügt wird?
    //Warum verträgt sich der code unten, mit der obigen schleife nicht, was ist da //fürn Zusammenhang?

    *character = s_letter[25];
    printf("%s", character);

    return 0;
    }

    Danke für die Aufklärung im voraus..



  • 😕

    Wo hast Du die Variablen feld, tmp, loop1 und loop2 deklariert?



  • Wenn du das compilierst solltest du einige Warnungen bekommen.
    Nimm die Ernst und sorge dafür das sie verschwinden.

    Du hast z.B.: die Variablen loop1, loop2, feld[], tmp nicht definiert.

    *character = s_letter[25];
    printf("%s", character);
    

    sollte wohl

    character = &s_letter[25];
    printf("%s", character);
    

    sein und dann sollte

    char s_letter[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 0};
    

    eine Null am Ende haben.

    PS: benutze bitte die Tags für C/C++ oder Code. Einfach Text markieren und den Button unter den Smilies ( 🙂 😃 😉 😞 :p 😡 )drücken.



  • #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
       int loop1, loop2;
       char character;
       char s_richtig[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '\0'};
       char s_falsch[]    =  "lmghijsonprqtxuvywzdabcfek" ;
    
       printf ("\n -- So schaut's gut aus:\n");
       for (loop1=0; loop1 < 26; loop1++)
       {
          printf("%c ", s_richtig[loop1]);
       }
    
       printf ("\n.\n.");
       printf ("\n -- So schaut's aktuell nicht so gut aus:\n");
       for (loop1=0; loop1 < 26; loop1++)
       {
          printf("%c ", s_falsch[loop1]);
       }
    
       printf ("\n.\n.");
       printf ("\n -- Dann wird mal sortiert! . . . .\n");
       for(loop1=0; loop1 < 26; loop1++)
       {
          for(loop2=0; loop2 < 26; loop2++)
    	  {
    	     if(s_falsch[loop1] < s_falsch[loop2])       // { l } < { m }
    	     {
    	        character = s_falsch[loop2];	         //  tmp  => { m }
    	        s_falsch[loop2] = s_falsch[loop1];       // { m } => { l }
    	        s_falsch[loop1] = character;		 // { l } =>  tmp
    	     }										 // Hiermit werden die Plätze der beiden Elemente im Array getauscht, somit umsortiert
    	  }
       }
       printf ("\n.\n.");
    
       printf ("\n -- Wie bei MöMax: Schaut doch gleich viel besser aus:\n");
       for (loop1=0; loop1 < 26; loop1++)
       {
          printf("%c ", s_falsch[loop1]);
       }
       printf ("\n.\n.");
    
       return 0;
    }
    


  • Warum funktioniert das Programm nicht?

    char* character;
    char s_letter[26] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
    //Warum funktioniert das Programm nicht mehr wenn diese schleife eingefügt wird?
    //Warum verträgt sich der code unten, mit der obigen schleife nicht, was ist da //fürn Zusammenhang?
    
    *character = s_letter[25];
    printf("%s", character);
    

    character ist ein Zeiger auf char, sollte also auf eine Speicherstelle mit einem char zeigen.
    Tut es aber nicht, da character nichts zugewiesen wurde.
    *character = s_letter[25]; ist im Prinzip richtig, aber character selber zeigt irgendwo hin, und an diese Stelle wird der Inhalt von s_letter[25] geschrieben. 😮 Sowas kann gut gehen, den Computer zum Absturz bringen oder den dritten Weltkrieg auslösen.

    printf("%s", character); erwartet einen Null-Terminierten String. Und den hast du nicht, auch wenn character auf s_letter[25] zeigt.


Log in to reply