HILFE!! BRAUCHE DRINGEND HILFE BEI EINFACHEM C-PROGRAMM



  • Hallo, erst einmal!
    Bin ein absoluter Anfänger im Programmieren. Hab aber bald einen Test und versuche schon länger eine Liste mit Namen alphabetisch zu sortieren, mittels einem C-Programm.
    Ich kann das Programm zwar compelieren, aber dann bekomme ich einen bus error und ich finde den Fehler einfach nicht. Ich hab wirklich schon alles versucht, aber ich schaffe es alleine einfach nicht. Bitte kann mir jemand helfen. Ich hab mein Programm unten drangehängt.
    Bin für jeden Hinweise dankbar 🙂
    lg grau

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #define FileName "./Text.tbl"
    #define MAX_LINELENGTH 1024
    
    main()
    {
    int m=0;
    int j=0;
    int i=0;
    char *p[80];
    char buffer [MAX_LINELENGTH+1];
    int b=0;
    char *x;
    int u=0;
    
    FILE *f=fopen(FileName, "r");
    	if(f==NULL)
    		{printf("Cannot open %s\n", FileName);
    		return 1;
    		}
    	while(fgets(buffer,MAX_LINELENGTH,f))
    {
    	printf("%s",buffer);
    
    	if(buffer[0]!='#')
    		{
    		i++;
    		}
    	else
    		{
    		j++;
    		}
    }
    
    rewind(f);
    
    for(m=0;m<=j;m++)
    	{
    	fgets(buffer,MAX_LINELENGTH,f);
    	}
    
    while(fgets(buffer,MAX_LINELENGTH,f))
    	{
    		sscanf(buffer,"%s",&p[m]);
    		m++;
    	}
    
    for ( b = 0;b < i-1; b++)
    {				
    
    		if (strcmp(p[b],p[b+1]) > 0)
    			{
    			x = p[b];
    			p[b] = p[b+1];
    			p[b+1] = x;
    			}
    
    }	
    
    for(u = 0; u <=  i; u++)
    printf("%s",p[u]);
    
    return 0;
    }
    


  • char *p[80];
    

    Damit hast Du erstmal nur 80 char* die irgendwohin zeigen.
    Du musst zunaechst Speicher reservieren bevor Du etwas darin ablegen kannst, zb so:

    char **p;
    // platz fuer so viele zeiger reservieren wie du zeilen einlesen willst:
    p= (char**)malloc(i * sizeof(char*));
    // jeden zeiger auf den reservierten platz fuer eine zeile zeigen lassen:
    for (n=0;n<i;n++)
      p[i]= (char*)malloc(MAX_LINELENGTH+1); // alternativ: strlen(buffer)+1
    

    Dein Konzept die mit # beginnenden Zeilen auszulassen(?) musst Du nochmal ueberdenken.
    Ueberlege auch nochmal wie oft jede Deiner Schleifen (<=) ausgefuehrt wird.
    Genaueres zum Sortieralgorithmus findest Du hier.



  • Danke für die schnelle Antwort, ich werd das gleich einmal ausprobieren.
    Mein # Konzept kann ich leider nicht auslassen 😞 weil wir immer solche Dateien bekommen zum auswerten 😕
    Danke noch einmal


Anmelden zum Antworten