Benutzerregistrierung. Fehrbesserungsvorschläge gesucht!



  • Zerfleischen war doch nicht wörtlich gemeint liebster Wutz.
    Und wunderbar, dass du die Ironie in "Fehrbesserungsvorschläge" erkannt hast.

    Vielen Dank für die Beiträge,
    ich kann soweit alles nachvollziehen.
    Gerne auch noch weiteres!

    @SeppJ: Damit sollte es doch schon gegessen sein oder? (buffer ist auch gleich drin)

    if((UserPWSave = fopen(bufferUserPW, "w")) == NULL) {
    fprintf(stderr, "Erstellen des Kontos fehlgeschlagen.");
    fclose(UserNameSave);
    return 1;
    }


  • Mod

    MrSonak schrieb:

    if((UserPWSave = fopen(bufferUserPW, "w")) == NULL) {
    fprintf(stderr, "Erstellen des Kontos fehlgeschlagen.");
    fclose(UserNameSave);
    return 1;
    }

    In diesem Fall ja, aber jetzt für noch ein paar mallocs, sockets und ähnliches ein und das wird ganz schnell ganz ekelig, wenn du jeden Fall von Hand behandelst. Und automatische Behandlung ist in C nicht wirklich gut machbar.

    Ach ja: Wie man seinen Beitrag lesbar formatiert



  • roflo schrieb:

    Schrott

    Schon wieder einer der sich berufen fühlt, mit aufgeschnapptem Googlehalbwissen die Allgemeinheit zu beglücken und konkreten Code inkl. die Sprache selbst zu beurteilen und "Empfehlungen" abzugeben.

    roflo schrieb:

    Das Programm ist nicht unbedingt Schrott

    Das kannst du als Anfänger ebensowenig beurteilen wie der Frager.

    roflo schrieb:

    -> Die verwendung von zeigern ist hier nicht sinnvoll, du kannst auch gleich den entsprechenden buffer verwenden

    Du hast keine Ahnung, was Zeiger sind und demzufolge auch keine Ahnung, wovon du redest.

    roflo schrieb:

    -> deklariere variablen da, wo du sie brauchst, nicht immer irgendwo ganz weit oben in einer funktion.

    Du hast keine Ahnung, was eine Deklaration ist gibst aber trotzdem "Empfehlungen" für den Gebrauch.
    Du hast keine Ahnung von C, du hast keine Ahnung wovon du redest.

    roflo schrieb:

    -> strncpy statt strcpy, da sonst Bufferoverflowgefahr.

    strncpy statt strcpy zu empfehlen ist schlimmstes Pfuscher-JW Niveau, du weißt auch hier nicht wovon du redest, weil du keine Ahnung hast und einen extrem begrenzten Horizont nebst Auffassungsgabe.

    roflo schrieb:

    Ansonsten, hut ab, ich hab hier noch keinen Anfänger gesehen, der c-strings verstanden hat und const verwendet

    Du desavouierst dich selbst als blutigen Anfänger, merkst das aufgrund deines laienhaften Halbwissens nicht, offenbarst damit deine grenzenlose Naivität.

    @MrSonak
    Du kannst deinen Code noch nicht mal vernünftig formatieren, ebensowenig wie du die C-Codetags benutzen kannst.
    Du kannst davon ausgehen, dass ein Verriss für deinen Code mind. ebensolchen Umfang haben würde wie der o.g. für deinen Bruder im Geiste.
    Dein Versuch, nachträglich deine Legasthenie zu kaschieren, ist naiv und offenbart nochmals deinen grundsätzlich beschränkten Horizont und Auffassungsgabe.
    Suche dir ein anderes Hobby.


  • Mod

    Bleib mal ruhig, nach zwei Wochen darf ein Code auch mal nicht perfekt sein.



  • Ich habe meinen Beitrag nochmals überarbeitet, ich hoffe doch sehr, dass er jetzt weniger missverständlich ist 😉



  • @roflo:

    1,2,3: Erldegit.
    4: Werde mich mal dran machen das zu trennen. Das Programm hier ist ja nur der Baustein zur "Registrierung".
    5: Benutzername und Passwort werden jetzt schon in einem Dokument gespeichert. Das habe ich bereits geändert. Die Dateien werden jetzt chronlogogisch 0,1,2,3 usw. gespeichert.
    Das mit den weiteren Daten, z.B. Datum finde ich eine super Idee. Werde mal schauen was da nützlich wäre!
    6: fflush(); ist ja nicht auf allen Plattformen kompatibel, deswegen mist. Bei getchar(); hatte ich immer das Problem, dass man einmal extra Enter drücken muss.
    Wie wäre da eine korrekte und funktionale Lösung? Rest nehme ich so an.
    7: Mache ich, sind aber aufgrund des "Counters" der jetzt die Dateinamen bestimmt sowieso rausgeflogen.

    Vielen Dank! 🙂



  • Es wäre irgendwie anständig wenigstens zu bemerken, dass ein Reihe von Beiträgen gelöscht wurden.


  • Mod

    EOP schrieb:

    Es wäre irgendwie anständig wenigstens zu bemerken, dass ein Reihe von Beiträgen gelöscht wurden.

    Die gelöschten Beiträge waren eine Bemerkung nicht wert.



  • Mein Beitrag war ausnahmsweise OK.


  • Mod

    EOP schrieb:

    Mein Beitrag war ausnahmsweise OK.

    EOP schrieb:

    Wutz hatte wohl etwas schlechte Laune. Soll schon mal vorkommen.

    Das ist dieser bemerkenswerte Erguss, um den das Forum getrauert hätte, wenn er unbemerkt verschwunden wäre? Dann darfst du in diesem Beitrag als ein Denkmal für deinen Kommentar ansehen.



  • Im Verhältnis zu diversen anderen Ergüssen meinerseits war der Beitrag m.E. voll OK. 🙂

    ps:
    Hätte nicht gedacht, dass du die gelöschten Beiträge für dein Poesiealbum aufhebst.


  • Mod

    EOP schrieb:

    ps:
    Hätte nicht gedacht, dass du die gelöschten Beiträge für dein Poesiealbum aufhebst.

    Was denkst du denn, wie der Weihnachtsmann sonst herausfindet, wer frech und wer artig war? Das wird alles in deine permanente Akte eingetragen.



  • 3:36, 5:14, 10:01 - du schläfst wohl nie.



  • Huch was war denn mit mir gestern los 😮 Durch 10 Stunden Ritt quer über den Globus und Wutz Angriffe hat sich wohl übelster Mist zusammengebraut.....

    @Mrsonak: Bei der Eingabe kannst du weiter fgets mit einer festgelegten Maximalgrenze benutzen, andere Möglichkeiten sehe ich nicht. Ist auch per se nicht für Bufferoverflows anfällig. Deine eine konstruktionen mit strcat aber schon.
    fflush ist btw standard und für Ausgabeströme gut definiert.



  • roflo schrieb:

    Ist auch per se nicht für Bufferoverflows anfällig. Deine eine konstruktionen mit strcat aber schon.

    Dann zeig ihn mal in dem Fall, du Held des overflows.



  • Wtf, bin ich jetzt völlig durch den Wind?!

    char getUserName [20]; 
    char bufferUserName[24]; 
    char bufferUserPW[30] = {"PW"};
    
    strcpy(bufferUserName,getUserName); 
    strcat(bufferUserName,".txt");
    strcat(bufferUserPW, bufferUserName);
    

    Diese Zeilen haben mich wohl durch fehlenden Codetags und Kotzformatierung völlig aus der Bahn geworfen.
    Ich kann Wutz jetzt schon irgenwie verstehen.

    'tschuldigung, werd mich erstmal hinlegen und Tee trinken...


  • Mod

    roflo schrieb:

    fflush ist btw standard und für Ausgabeströme gut definiert.

    Aber auf Eingabeströmen, wie hier gemacht, ist es undefiniertes Verhalten. Das ist auch kein theoretischer Ausnahmefall, sondern wird dir auf Nicht-Windowssystemen tatsächlich jede Menge Unfug anrichten.



  • Also mittlerweile siehts so aus...

    Das hier ist die Initialisierung. Vor dem ersten Start.

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[])
    {
        mkdir("User_Data");
    
        FILE *UserData;
        if((UserData = fopen ("User_Data\\COUNTER_User.txt","w")) == 0) {
                     fprintf(stderr,"Fehler bei der Initialisierung.");
                     sleep(1000);
                     return 1;
                     }
        else {
                     int temp = 0;
                     fprintf(UserData,"%d",temp);
                     fclose(UserData);
                     }
    
      system("PAUSE");	
      return 0;
    }
    

    Ich habe die Codetags jetzt kapiert. Muhahah.

    Das ist das überarbeitete alte.
    Wie ich die Daten allerdings wieder auslesen soll weiß ich nicht. Werde wohl doch wieder den Benutzernamen als Datei oder Ordnernamen verwenden, dann finde ich das jeweils zugehörige Passwort auch wieder.

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    void chomp(char *str) {
       size_t p=strlen(str);
       str[p-1]='\0'; }
    
    int main(int argc, char *argv[])
    {   FILE  *UserCounter;
        int answerUserCounter;
        int newUserCounter ;
    
        if((UserCounter = fopen("User_Data\\COUNTER_User.txt","r")) == NULL) {
                        fprintf(stderr, "Systemfehler1");
                        sleep(2000);
                        return 1;
                        }
        else {          
    
                               fscanf(UserCounter, "%d", &answerUserCounter);  
                               fclose(UserCounter);
                               }
    
        FILE *UserData;
    
        char getUserName [20];
        char getUserPW1 [20];
    
        int decisionName;      
    
    do{   
    
    printf ("Willkommen bei DD V1.0!\n\nLegen sie zunaechst ihren Benutzernamen und ihr Passwort fest.\nBenutzername: ");
           fgets(getUserName,20,stdin);
           chomp(getUserName);
    
                printf("Moechten sie diesen Benutzernamen festlegen?\n\n [1] Ja    | [2] Nein    | [3] Benutzerkontenerstellung abbrechen"); 
          decisionName=getch();
    
    if(decisionName=='3') {
          return 0;}
    }while(decisionName!='1');            
                                 char FileName [30] = {"User_Data\\"};
                                               char bufferUserCounter[10];
                                               sprintf(bufferUserCounter, "%d", answerUserCounter);
                                          strcat(FileName,bufferUserCounter);
                                          strcat(FileName,".txt");
    
    int decisionPW;
    do{     char getUserPW2 [20];
    do{
    printf("\n\nErster Schritt zum Erstellen des Benutzerkontos '%s' erfolgreich!\nWaehlen sie nun ihr Passwort\n\nPasswort: ",getUserName);
            fgets(getUserPW1,20,stdin);
            chomp(getUserPW1);  
    
                    printf("Passwort wiederholen: ");
                    fgets(getUserPW2,20,stdin);
                    chomp(getUserPW2);
    }while((strcmp(getUserPW1,getUserPW2))!=0);  
    
                printf("Moechten sie dieses Passwort festlegen?\n\n [1] Ja    | [2] Nein    | [3] Benutzerkontenerstellung abbrechen");
                decisionPW=getch();
    if(decisionPW=='3'){
           return 0; }             
    }while(decisionPW!='1');
    
    if((UserData = fopen(FileName, "w")) == NULL) {
                fprintf(stderr, "Systemfehler2.");
                return 1;
                }
    else {
                fprintf(UserData, "%s\n%s", getUserName, getUserPW1);
                          if((UserCounter = fopen("User_Data\\COUNTER_User.txt","w"))== NULL) {
                                        fprintf(stderr, "Systemfehler3.");
                                        sleep(2000);
                                        return 1;
                                        }
                          else {
                                        newUserCounter = answerUserCounter + 1;
                                        fprintf(UserCounter,"%d",newUserCounter);
                                        }
                }
    fclose(UserData);
    fclose(UserCounter);
    
    printf("\n\nErstellen des Benutzerkontos war erfolgreich!");
    sleep(3000);
    
    //Hier soll mal der Übergang zum eigentlichen Program hin
    
      return 0;
    }
    


  • MrSonak schrieb:

    Ich habe die Codetags jetzt kapiert. Muhahah.

    Dann drück jetzt mal die Tasten fürs Auto-Einrücken in Deiner IDE.
    Bei MSVC wären das Strg+A gefolgt von Alt+F8.


Anmelden zum Antworten