Fehler bei ganz einfachem programm?



  • Hallo Leute ich hab folgendes Programm geschrieben:

    #include <stdio.h>
    #include <string.h>

    int main()

    {

    char string[30];
    int i=0;
    char c;
    int len;

    len=strlen(string);

    scanf("%s", string);

    scanf("%c", &c);

    for(i=0;i<len;i++)
    {
    if(string[i]==c)
    string[i]=' ';
    }

    printf("%s", string);

    return 0;

    }

    Ich will das man einen string und einen buchstaben eingibt. den buchstaben den man eingegeben hat soll aus dem string entfernt werden falls er überhaupt vorhanden ist.

    mein problem ist aber das das programm einfach nach der eingabe des strings aufhört wo ist der fehler?

    danke!



  • Erster Fehler:

    char string[30];
        int len;
    ...
        len=strlen(string);// Fehler! Die den String abschliessende Null fehlt oder ist irgendwo.
        len = (sizeof string)-1; 
        // oder
        string[29] = '\0';
        // und dann
        len=strlen(string); // !
    


  • du möchtest die länge einer nicht terminierten zeichenkette bestimmen, bevor du sie einliest.



  • Guten Abend,

    Denat schrieb:

    wo ist der fehler?

    also erstens die Code Tags vergessen ;). Bitte das naechste mal verwenden, da damit das helfen viel leichter faellt.
    Zweitens gibt dir strlen die laenge bist zum ersten vorkommenden '\0' Zeichen an. Was aber bei dir undefiniert ist, da deine Variable nicht initialisiert wird wie auch emmax schon gesagt hat (btw dein drittes bslp emmax

    string[29] = '\0'
    

    is ja au ned 100% richtig, da du ja ned weiss ob zufaellig schon vorher ne NULL vorkommen).
    Mein Loesung zu diesen Problem waere es mit #define oder wie letztens hier au schon besprochen mit enum zu regelen:

    #ifdef USE_ENUM
    enum len{ STR_LEN = 30};
    #else
    #define STR_LEN (30)
    #endif
    
    char string[STR_LEN];
    
    /*....*/
    for(i = 0; i < STR_LEN; i++)
    /*....*/
    

    Peace & Blessed Love C0de4Fun



  • C0de4Fun schrieb:

    Mein Loesung zu diesen Problem waere es mit #define oder wie letztens hier au schon besprochen mit enum zu regelen:

    Warum nicht einfach die Länge des Strings mit strlen bestimmen, NACHDEM der String eingelesen wurde (siehe auch Hinweis von logikOr)?



  • emmax schrieb:

    Erster Fehler:

    char string[30];
        int len;
    ...
        len=strlen(string);// Fehler! Die den String abschliessende Null fehlt oder ist irgendwo.
        len = (sizeof string)-1; 
        // oder
        string[29] = '\0';
        // und dann
        len=strlen(string); // !
    

    Also da scheint mir:

    char string[30];
    int len = 29;

    einfacher ...



  • Denat schrieb:

    mein problem ist aber das das programm einfach nach der eingabe des strings aufhört wo ist der fehler?

    danke!

    Nach dem String ist noch ein Wagenrücklauf im Eingabepuffer, den Du extra auslesen mußt. Mach mal:

    #include <stdio.h>
    #include <string.h>

    int main()

    {

    char string[30];
    int i=0;
    char c = 0;
    int len;

    scanf("%s%c", string, &c);

    scanf("%c", &c);

    len=strlen(string);

    for(i=0;i<len;i++)
    {
    if(string[i]==c)
    string[i]=' ';
    }

    printf("%s", string);

    return 0;

    }


Anmelden zum Antworten