Unbekannter Parameter in Variablen



  • hi @ all

    ich habe hier folgenden Code schnippsel.

    #include<stdio.h>
    #include<string.h>
    
    int main(void){
    
     char kette[5];
    
     scanf("%s", &kette);    
    
     printf("Es wurde folgende Zahl eingegeben:%s\n\n", kette);    
    
      system("Pause");  
    
    }
    

    und ich kann die "5" in

    char kette[5];
    

    nicht zuordnen.

    Bestimmt die "5" die länge der Characters?



  • Die 5 sagt aus, dass das Array 5 Elemente haben soll. Tatsächlich wird nämlich keine Zahl eingelesen, sondern eine Zeichenkette.

    Gibst du 1001 ein, dann steht im Speicher:

    { '1', '0', '0', '1', '\0' }
    

    Das Programm sollte dager Probleme machen, wenn die eingegebene Zahl zu viele Ziffern enthält.



  • ok das heißt wenn ich

    char kette[5];
    

    hab.

    dann kann ich 5 Zeichen eingeben und das 6 ist immer automatisch "\0"?



  • Schau auf das Beispiel und zähle.

    MfG f.-th.



  • Nein nein, \0 zählt auch zu den 5 dazu. Also 4 Zeichen + \0.



  • aber wenn ich eine Array mit dem Parameter "5" versehe, dann hat Sie doch 6 Felder.
    Sprich:

    Array[5];
    

    wäre ja dann

    Array[0]=x1
    Array[1]=x2
    Array[2]=x3
    Array[3]=x4
    Array[4]=x5
    Array[5]=x6
    

    und da es sich hier ja um eine Zeichenkette handelt wäre das letzte zeiche immer "/0"?



  • Es wird aber nur bis 4 gezählt und nicht bis 5, wenn man bei 0 anfängt.



  • Polliny schrieb:

    und da es sich hier ja um eine Zeichenkette handelt wäre das letzte zeiche immer "/0"?

    Ja.
    Darauf verlassen sich die Stringfunktionen von C.

    char kette[5]; heißt: Ein Feld von 5 char-Variablen
    In C fangen die Felder immer bei 0 an. Darum 0, 1, 2, 3, 4 sind zusammen 5 Elemente.



  • ahhh ok Danke, jetzt hab ich es verstanden

    jetzt hab ich folgende Test dazu Programmiert

    #include<stdio.h>
    #include<string.h>
    
    int main(void){
    
     char kette[5];
    
     scanf("%s", &kette);    
    
     printf("Es wurde eingegeben:%s\n\n", kette);    
    
      system("Pause");  
    
    }
    

    jetzt kann ich aber soviel ich will eingeben und es wir auch an an die Variable "kette" weitergegeben und zurückgegeben.

    Wie kann das sein.

    Die Variable soll doch nicht mehr als 5 Zeichen aufnehmen.



  • scanf kann nicht feststellen wie groß das Array ist, das du übergibst.
    Dies gilt auch für jede andere Funktion.

    Und das ist mit die größte Schwäche von C und verantwortlich für ein Großteil der Sicherheitslücken auf Computern.

    Du kannst aber scanf mit dem Formatstring (das "%s") mitteilen wie viel Zeichen eingelesen werden dürfen. Z.B "%4s"

    Zudem ist der Aufruf bei Arrays ohne das & (achte auch auf Compiler-Warnungen)

    scanf("%4s", kette);
    


  • Vielen Dank Dirk, das war mal eine gute Erklärung 👍


Anmelden zum Antworten