Array in Laufzeit erstellen



  • Hallo,

    Ich lesen Zeilenweise aus einer Textdatei:

    char str[I_DIC_STR_LEN];
    	FILE * fp;
    	const char * const filename = "english.dic";
    	if ((fp = fopen (filename, "r")) == NULL) 
    	{
    		fprintf(stderr,"%s could not be found. Programm is terminating now!\n",filename);
    		exit(-1);
    	}
    	while (fgets(str, I_DIC_STR_LEN, fp)) 
    	{
                 ......
    	}
    	fclose(fp);
    

    Das klappt soweit.
    Dazu hab ich aber eine Frage: Wie kann ich abfragen wie viele Zeilen die Datei hat?

    Nun meine eigentliche Frage:
    Wie kann ich Zeile für Zeile in ein Array schreiben?
    Das Array muss dann während der Laufzeit erstellt werden. Wie geht das?

    Gruß,
    DFI10X

    PS: Warum dauert das so ewig bis die Registrierungsmail ankommt?



  • int *TestArray = new int[VariableCount];

    So müsste es afaik gehen...



  • Das versteh ich nicht ganz 😕

    Also ich lese Strings zeilenweise aus einer Datei und die sollen in ein Array.

    while (fgets(str, I_DIC_STR_LEN, fp)) 
        {
                 ......
        }
    

    Da wo die ..... sind muß das ganze hin



  • Hallo!

    Vielleicht so:

    int count = 0;
    char **line = NULL;
    char str[I_DIC_STR_LEN];
    FILE * fp;
    const char * const filename = "english.dic";
    
    if ((fp = fopen (filename, "r")) == NULL)
        {
            fprintf(stderr,"%s could not be found. Programm is terminating now!\n",filename);
            exit(-1);
        }
    
    while (fgets(str, I_DIC_STR_LEN, fp))
    {
       count++;
      if (!line)
        line = (char **)malloc(count * sizeof(char *));
      else
        line = (char **)realloc(line, count * sizeof(char *));
    
       line[count - 1] = (char *)malloc(strlen(str) * sizeof(char));
        strcpy(line[count - 1], str);
    }
    

    Gruss
    Michael



  • Ups!!

    Dummer Fehler:

    line[count - 1] = (char *)malloc((strlen(str) + 1) * sizeof(char));
    

    Das Array noch mit NULL terminieren:

    while (fgets(str, I_DIC_STR_LEN, fp))
        {
                 ......
        }
    line = (char **)realloc(line, (count + 1) * sizeof(char *));
    line[count] = NULL;
    


  • Danke 👍



  • Hab doch noch ein Problem 😃

    In der Funktion ist das Array schön ansprechbar, aber leider nicht mehr ausßerhalb...

    char **line = NULL; 
    	int iArrayLenght;
    	int i;
    	const char * const filename = "english.dic";
    
    	readLinesFromFile (line, filename, &iArrayLenght);
    	printf("%i\n",iArrayLenght);
             for(i = 0; i < iArrayLenght; i++) printf("%s\n",line[i]);
    

    Also in der Funktion readLinesFromFile kann ich das Array ausgeben, aber in der for-Schleife nicht mehr. Das Programm schmiert ab.
    iArrayLenght kommt aber an...

    Hab keinen Plan was ich falsch mach... 😕



  • Hast du die Variable global deklariert?

    Falls lokal, wo?



  • int readLinesFromFile (char ** array, const char * const filename, int * lenght);
    
    int main (void) {
    	char **line = NULL; 
             ........
    	readLinesFromFile (line, filename, &iArrayLenght);
    
    }
    

    Schon lokal, in main....



  • Hallo!

    Lass 'readLinesFromFile' line als return-Wert zurückgeben.

    line = readLinesFromFile (line, filename, &iArrayLenght);
    

    Schönen abend noch! 😉

    Gruss Michael



  • Cuul :D, das geht. Nochmal danke!


Anmelden zum Antworten