Länge der Zeichenkette im Array bestimmen



  • Hallo,

    "Schreiben Sie ein Programm, das mittels der Funktion gets() eine Zeichenkette in einen Vektor mit 21 Elementen vom Typ char einliest." Aufgabe erledigt !

    Beispiel:
    char zk[21];
    gets(zk);

    "Schreiben Sie dann einen Programmteil, der die Länge der Zeichenkette im Array bestimmt und am Bildschirm anzeigt."

    Ich habe das folgende Programm geschrieben, nur leider gibt es mir immer den Wert 19 raus, egal wie lang die Zeichenkette ist ? Wie kann das sein, es wäre schön, wenn jemand den Fehler im Code findet:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main(void) {
    	char zeichenkette[5];
    	int laenge;
    	laenge = strlen(zeichenkette);
    	// Text kann 4 Zeichen entgegen nehmen
    	printf("Text eingeben:\n");
    	gets(zeichenkette);
    	printf("Sie haben eingegeben:\n%s\n", zeichenkette);
    	printf("\n");
    	printf("Zeichenkette besteht aus %d Zeichen\n", laenge);
    	system("PAUSE");
    	return 0;
    }
    


  • Du bestimmst die Länge, bevor irgendetwas sinnvolles in dem Array steht.

    Das sollte der Compiler aber mit einer Warnung anmeckern. Wenn nicht, dann erhöhe den Warnlevel (wie, ist Compilerabhängig).

    Wenn es nicht gerade um Pufferüberlauf geht, solltest du einen Bogen um den Aufgabesteller machen. gets geht garnicht.



  • 1. Wer verlangt, eine Aufgabe mit gets zu realisieren, hat ein paar Schrauben locker, und seine Autorität sollte ohne jeden Zweifel in Frage gestellt werden. Eigentlich hat er auch verdient, in der Öffentlichkeit ausgelacht zu werden.

    2. Du machst strlen , BEVOR du den String eingelesen hast (mit gets *würg*). Eigentlich willst du ERST einlesen und dann die Länge bestimmen.



  • Ahh okay, d.h. ich ändere die Reihenfolge und es müsste dann funktionieren ?



  • Ich würde sagen: probier's aus.



  • Super, funktioniert. Dann interessiert mich noch:
    char zeichenkette[5];
    // Text kann 4 Zeichen entgegen nehmen
    Ist das wirklich so ?

    DANKE !



  • In C hast du keine Möglichkeit, die Länge eines Strings zu prüfen, bis auf das Null-Byte am Ende jedes Strings. Nun, zumindest sollte da ein Null-Byte sein. Ein Null-Byte wird nicht ausgegeben, es ist nicht sichtbar, aber es ist da und benötigt ein Byte Speicherplatz. Deswegen kann dein Array auch nur 4 sichtbare Zeichen - und halt das Null-Byte - beinhalten.

    Kleine Korrektur: wir reden hier von ASCII-Zeichen. Je nach Zeichensatz kann ein Zeichen aber mehr als 1 Byte beinhalten. Umlaute können unter Windows-Zeichensätzen 1 Byte beanspruchen, oder unter UTF-8 2 oder mehr. So kann dein Array auch gerade groß genug sein, zwei 'ä' und das Null-Byte zu beinhalten.


Anmelden zum Antworten