Array mit einer Variablen Größe



  • Ich würde gerne ein Programm schreiben, dass eine txt-Datei einließt und in einem Array speichert. Das Problem hierbei ist nur, dass man vorher nicht weiß, wie groß die Datei ist und wie groß das Array sein muss. Gibt es eine Möglichkeit, die Größe der Datei automatisch einzulesen und anschließend ein Array in genau derselben Größe zu erstellen bzw. kann man das Problem mit der Array Größe umgehen?

    #include <stdio.h>
    
    int main (void)
    {
      FILE *datei;
      char text[1000];
      int trefferzahlbegin=1;
      int trefferzahlend=1;
      int i;
    
      // Zurücksetzen von text
      for (i=0; i<1000; i++)
      {text[i]=0;};
    
      //Einlesen der Textdatei
      datei = fopen ("textdatei.txt", "r");
      if (datei != NULL)
        {
          fscanf (datei, "%1000c", text);
          fclose (datei);
        }
    
    	// "begin " am Textanfang 
    		if (text[0]==98 &&
    		text[1]==101 &&
    		text[2]==103 &&
    		text[3]==105 &&
    		text[4]==110 &&
    		text[5]==32)
    		{printf("%d. Fundstelle fuer 'begin ' beim 1. Zeichen\n",trefferzahlbegin);
    		trefferzahlbegin=trefferzahlbegin+1;}
    
    	//"begin " im Text
    	for (i=1; i<1000; i++)
    	{	if (text[i]==98 &&
    		text[i+1]==101 &&
    		text[i+2]==103 &&
    		text[i+3]==105 &&
    		text[i+4]==110 &&
    		text[i+5]==32)
    		{printf("%d. Fundstelle fuer 'begin ' beim %d. Zeichen\n",trefferzahlbegin,i+1);
    		trefferzahlbegin=trefferzahlbegin+1;}
    		}
    
    	printf("\n\n");
    
    	// " end " im Text
    	for (i=0; i<1000; i++)
    	{	if (text[i]==32 &&
    		text[i+1]==101 &&
    		text[i+2]==110 &&
    		text[i+3]==100 &&
    		text[i+4]==32)
    		{printf("%d. Fundstelle fuer ' end ' beim %d. Zeichen\n",trefferzahlend,i+2);
    		trefferzahlend=trefferzahlend+1;};
    	}
    
    	// "end " am Textende
    	for (i=0; i<1000; i++)
    	{	if (text[i]==32 &&
    		text[i+1]==101 &&
    		text[i+2]==110 &&
    		text[i+3]==100 &&
    		text[i+4]==0)
    		{printf("%d. Fundstelle fuer ' end ' beim %d. Zeichen\n",trefferzahlend,i+2);
    		trefferzahlend=trefferzahlend+1;};
    	}
    }
    

    Danke!



  • Hi !
    Ja, du kannst Funktionen benutzen, die dir die Größe der Datei liefern und dieser Größe entsprechend Arbeitsspeicher für dein Array reservieren ( fstat, malloc, usw. ).

    Anstatt der Funktion fstat kannst du auch mit fseek und ftell arbeiten:
    http://www.cplusplus.com/reference/clibrary/cstdio/ftell.html

    Du kannst aber auch ein Array mit einer Anfangsgröße benutzen, den benutzten Speicherplatz zählen und wenn er nicht reicht dynamisch vergrößern ( malloc, realloc, usw ).



  • Und es gibt mit C99 auch Arrays variabler Länge 😉


Log in to reply