Die Länge eines Strings ermitteln



  • hi an alle!
    Meine C Kenntnisse sind leider noch sehr beschränkt aber ich habe mal versucht ein einfaches Programm zur Ermittlung der länge eines strings geschrieben aber aus irgendeinen Grund zeigt das Programm immer um einen zu viel an 😕 ???
    schon mal vielen dank für die Hilfe

    hier ist der code:

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

    int main(int argc, char *argv[])
    { char text[100];
    int Groesse;

    printf("gib hir deinen Text ein:");
    fgets(text,100,stdin);
    Groesse=strlen(text);
    printf("%d\n",Groesse);

    }



  • fgets liest das newline zeichen mit ein, dass du mit enter ja vermutlich auch noch eingibst 😉

    ein printf("%s\n", text); hätte das problem gelöst 😉



  • Shade Of Mine schrieb:

    fgets liest das newline zeichen mit ein, dass du mit enter ja vermutlich auch noch eingibst 😉

    ein printf("%s\n", text); hätte das problem gelöst 😉

    Was getrunken?

    #define BUFFER_LEN 100 // Falls du mal was ändern willst brauchst dus nur HIER tun!
    
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[])
    { 
        char text[BUFFER_LEN];
        int Groesse = 0; // Initalisieren ist immer besser...
    
        //printf("gib hir deinen Text ein:");
        printf("Gib hier deinen Text ein: "); // Rechtschreibung :)
        fgets(text, BUFFER_LEN, stdin);
        Groesse = strlen(text) - 1;
        printf("Groesse: %i\n", Groesse);
    }
    

    ...



  • Shade Of Mine schrieb:

    ein printf("%s\n", text); hätte das problem gelöst 😉

    Ich verstehe auch nicht, was das gelöst hätte.

    @asdasdasd: Ist immer noch nicht ganz korrekt. Ändere die erste Zeile von 100 auf 10 und dann gib "0123456789" ein (nämlich 10 Zeichen). Dein Program sagt "Groesse: 8" aber die tatsächliche Größe ist 9, da es keinen Platz für das Newline gab.

    Wäre das Richtige

    Groesse = strlen(text);
        if(text[Groesse]) Groesse--;
    


  • supertux schrieb:

    Wäre das Richtige
    Groesse = strlen(text);
    if(text[Groesse]) Groesse--;

    Naja, also, wenn Newline eingelesen wird, hast du an der Position den Terminator,
    dann ist text[Groesse] == 0 und Groesse wird nicht dekrementiert.

    Möchte man das frechdachsmäßig mit eingeschleuste '\n' nicht mitzählen, kann man doch einfach:

    len = strlen(buf);
    if ( buf[len-1] == '\n' ) len--;
    

    abfragen.



  • walter01 schrieb:

    hi an alle!
    Meine C Kenntnisse sind leider noch sehr beschränkt ...

    Da mach dir mal nicht draus, wie man sieht ist es auch bei den Regs der Fall 😉 😃

    D.n.n.N. schrieb:

    Möchte man das frechdachsmäßig mit eingeschleuste '\n' nicht mitzählen, kann man doch einfach:

    len = strlen(buf);
    if ( buf[len-1] == '\n' ) len--;
    

    abfragen.

    Das ist doch mal ne Lösung. Man könnte den Compiler auch zur Strafe anmeckern:

    #include <stdio.h>
    
    int main()
    {
    	char buf[256];
    	int len = 0;
    	fgets( buf, 256, stdin );
    
    	len = strlen(buf);
    	if ( buf[len-1] == '\n' ) 
    	{
    		printf("Du Sausack, behalt dein \\n\n");
    		len--;
    	}
    	return 0;
    }
    

    🙂



  • Und eventuelle weitere Zeichen im Eingabepuffer werden einfach ignoriert?

    supertux schrieb:

    Shade Of Mine schrieb:

    ein printf("%s\n", text); hätte das problem gelöst 😉

    Ich verstehe auch nicht, was das gelöst hätte.

    Das hätte das Problem insofern gelöst, dass der Op dann das angehängte \n bemerkt hätte.


Anmelden zum Antworten