Namensliste in C



  • Hallo alle zusammen 🙂
    Ich sitze schon seit vielen Stunden daran und ich weiß nicht mehr weiter.
    Und zwar muss ich ein Programm schreiben der Namen in aus Datei ausliest und sie in einem Pointer array speichert. Allerdings sollen Namen die mehrmals in dieser Liste vorkommen nur einmal gespeichert werden.

    Hier wäre mein Code allerdings stürzt das Programm ab und ich weiß nicht warum. Muss am Algorithmus liegen da das Programm funktioniert wenn ich die while schleife leer lasse.

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main()
    {
        char *namen[500];
        char InputBuffer[255];
        int x=0, i, j, anzahl=0;
        FILE* pDatei;
        pDatei=fopen("Vornamen.txt","r");
    
        while(fscanf(pDatei,"%s",InputBuffer)!=EOF)
        {
            for(i=0;i<=x; i++)
            {
                if(namen[i]==InputBuffer)
                {
                    break;
                }
                else if(i==x)
                {
                    namen[x]=InputBuffer;
                    x=x+1;
                }
            }
        }
    
        fclose(pDatei);
    }
    

    Ich bedanke mich für jeden Ratschlag 😃



  • keine ahnung warum es jetzt genau abstürzt, aber strings vergleicht man so nicht und ich habe zweifel, dass "char *namen[500]" etwas sinnvolles abgibt.


  • Mod

    HansKlaus schrieb:

    keine ahnung warum es jetzt genau abstürzt,

    ich habe zweifel, dass "char *namen[500]" etwas sinnvolles abgibt.

    Da könnte ein Zusammenhang bestehen 🙂



  • in deinem Pointer-Array stehen immer nur Verweise auf InputBuffer.
    Allerdings sind am Anfang die Zeiger noch nicht initialisiert.

    Benutze den Debugger oder mach ein paar Debugausgaben mit printf. Für Pointer ist %p vorgesehen.

    Der Vergleich auf EOF bei fscanf ist auch falsch.

    HansKlaus schrieb:

    und ich habe zweifel, dass "char *namen[500]" etwas sinnvolles abgibt.

    Wenn du Zweifel hast, dann lass deine Finger von der Tastatur.
    http://cdecl.org/?q=char+*namen%5B500%5D



  • - Vergleich und Zuweisung von Strings sind fehlerhaft (Z.17+23) (strcmp+strcpy verwenden)
    - du hast 500 Zeiger definiert aber nicht den Speicher, auf den sie zeigen (Zeiger sind in C elementar)
    - fscanf immer mit Returnwert und Positivlogik verwenden, bei dir hier ==1
    - Längenbegrenzung der Namen hast du nicht durchgeführt, UB wenn ein Name >=255 Zeichen lang ist
    - Doppelnamen "Müller Lüdenscheidt" wertest du nicht richtig aus

    Das sind 5 Ratschläge, das reicht erstmal.


Anmelden zum Antworten