Status_access_violation



  • So Ihr beiden,

    vielen Dank für eure Hilfe. Nun haben "wir" es ja endlich geschafft. 😉
    Ich habe nun einfach

    char x[256];
        int i, weiter = 1, lauf = 0, l[MAXW] = {0};
        printf("Schreiben Sie ihren Text: \n");
        gets(x); //Eingabe des zu bearbeitenden Textes
    

    eingebaut um eine benutzerdefinierte Eingabe bearbeiten zu lassen.
    Ihr habt mir eine "meeeeeeenge" Zeit gespart. 🙂
    Also, vielen Dank nochmal.



  • Übrigens,

    kann man in deine Zeile "24" auch etwas einbauen,
    das falls es bei einer Wortlänge über 7 Stück gibt,
    das er die Anzahl dann halt irgendwie am Schluss unten hinschreibt?



  • Das hier:

    char *sWortlaenge;
    
        /* ... */
    
            sWortlaenge[1] = strtok(NULL, ". ,\0\n");
    

    ist problematisch. Das gleiche gilt für das hier:

    char *point;
        char lang = *point;
    
        /* ... */
    
            /* point ist hier immer noch nicht initialisiert */
            strcpy(point, sWortlaenge);
    


  • Ich bin halt leider noch etwas im "Anfängerstadium"
    und lerne alles gerade noch kennen.^^ 😋



  • Phenny schrieb:

    Übrigens,

    kann man in deine Zeile "24" auch etwas einbauen,
    das falls es bei einer Wortlänge über 7 Stück gibt,
    das er die Anzahl dann halt irgendwie am Schluss unten hinschreibt?

    Ja, unter die while-Schleife:

    if( lauf>7 ) printf("Mehr als 7, nämlich: %d\n",lauf);
    


  • Danke dir recht herzlich 🙂

    *keks geb* 😃



  • Phenny schrieb:

    gets(x); //Eingabe des zu bearbeitenden Textes

    Dein 1.Versuch war schon besser, da fgets mit Bereichsüberprüfung arbeitet, also nimm ihn halt wieder:

    fgets(sString, 256, stdin);
    


  • Ein bisschen anders dachte ich eigentlich.

    Und zwar halt z.B. so (ist echt schwer umzusetzen)

    1 2 3 4 5 6 7 8 9 10
    -----------------------------
    * * * *
    * * *
    * *
    *
    -----------------------------
    3 4

    ich weiß, dass klingt echt dämlich 😕



  • Das Problem mit fgets bei mir ist, dass
    er mir dann wieder mit den doofen Pointern to Integer kommt und dem
    gewusel. Und ich hab so meine Probleme mit den Pointern^^



  • Phenny schrieb:

    Und ich hab so meine Probleme mit den Pointern^^

    Das geht jedem Anfänger so.
    Also dann:

    char x[256];
    ...
    fgets(x,sizeof x,stdin);
    ...
    


  • Oh mein Gott,

    warum bin ich bloß nicht auf "sizeof" gekommen? 😕
    Ich glaube nämlich, dass ich das schon einmal benutzt habe.

    Gibt es auch eine so simple Lösung für das andere Problem?



  • Was für ein anderes Problem?



  • Phenny schrieb:

    Ein bisschen anders dachte ich eigentlich.

    Und zwar halt z.B. so (ist echt schwer umzusetzen)

    1 2 3 4 5 6 7 8 9 10
    -----------------------------
    * * * *
    * * *
    * *
    *
    -----------------------------
    3 4 //Zeigt an wieviele Wörter die
    //entsprechende Anzahl an Buchstaben
    //haben und zählt sie auf, falls
    //es sonst zuviele Sternchen werden

    ich weiß, dass klingt echt dämlich 😕

    Das Problem :p



  • Phenny schrieb:

    -----------------------------
    3 4 //Zeigt an wieviele Wörter die
    //entsprechende Anzahl an Buchstaben
    //haben und zählt sie auf, falls
    //es sonst zuviele Sternchen werden

    char strtmp[10];
    ...
    for(i=0;i<MAXW;++i)
      printf("%3s",l[i]>7?_itoa(l[i],strtmp,10):"");
    

    wobei _itoa kein ANSI C mehr ist.



  • Es gibt aber eine Alternative Funktion die ANSI C ist.
    Mit

    sprintf(strtmp,"%d",l[i])
    

    geht das auch, oder wers sicher mag kann auch snprintf verwenden.



  • Ja aber, wie mache ich das dann, wenn _itoa kein Ansi-C mehr ist?
    Der Compiler erkennt das ja dann nicht mehr. 😞



  • Ich habe auch schon probiert, sprintf bzw. snprintf in diese Zeile umzubauen,
    hat er aber dann andauernd Probleme mit dem Pointer. . . 😕



  • Phenny schrieb:

    Ich habe auch schon probiert, sprintf bzw. snprintf in diese Zeile umzubauen,
    hat er aber dann andauernd Probleme mit dem Pointer. . . 😕

    Wenn du MS-VC++ verwendest, ist _itoa definiert und du kannst es verwenden.
    itoa stammt noch aus seligen K&R Zeiten und hat es damals nicht in den ANSI Standard geschafft.
    Ansonsten bleiben nur längere Konstrukte übrig, wie

    (sprintf(strtmp,"%d",l[i]),strtmp)
    


  • Also, ich benütze NetBeans und den Compiler Cygwin...
    und der kennt diese Funktion leider nicht.



  • Ich habe es nun wie in deinem Beispiel gemacht, und es Funktioniert
    hervorragend. 😋
    Deshalb muss ich nocheinmal sagen wie dankbar ich euch
    bin! Also, recht herzlichen dank euch beiden!


Anmelden zum Antworten