Malloc/Calloc Problem mit Zeiger auf Array



  • Hi,

    bin gerade ein wenig am verzweifeln. Habe ein Programm geschrieben mit dem ich eine Datei einlese und den Text codiere. Habe nun aber bemerkt das ich nur Zeilen mit 35 Zeichen einlesen kann. Habe dann auf alle möglichen Arten versucht den char Platz zu erweitern aber ohne Erfolg... ein sizeof des aktuellen Arrayfeldes sagt mir immer Groesse 4.
    Vielleicht hat jmd noch einen Tipp parat.

    char **Eingabe;
    int Anzahl; 
    
    /* Zeilenanzahl feststellen */
    for (int i=0; !feof(datei); i++){ 
             fgets(zeile, sizeof(zeile), datei);
             Anzahl++;
             if (feof(datei)) break;
             }
    
    /* Arrayfelder für die Zeilenlnanzahl allocieren */
    Eingabe=(char**)(calloc(Anzahl,sizeof(char*)));
    
    for(int i=0; i < Anzahl ;i++){
         Eingabe[i]=(char *)(calloc(128,sizeof(char))); /* hier will es leider nicht */
             printf("Allocierte Groesse? :%i", sizeof(Eingabe[i])); 
             if(Eingabe[i] == NULL){
    		fprintf(stderr, "out of memory\n");
    		return EXIT_FAILURE;
    		}
             fgets(B, 100, datei);
       }
    

    Thx und Gruese Khaindar



  • Khaindar schrieb:

    ein sizeof des aktuellen Arrayfeldes sagt mir immer Groesse 4.

    Eben die Größe eines int-Zeigers, ich habe gerade in einem
    anderen Thread geschrieben, daß sizeof nur ein Operator ist
    der zur Compilezeit ausgewertet wird; keine Funktion.



  • Hm ok das leuchtet natürlich ein. Nur warum kann ich dann egal wie gross ich den char Speicher allociere nur 35 Zeichen einlesen?



  • fgets(zeile, sizeof(zeile), datei);
    

    Wenn zeile ein char* und kein char[] ist,
    kannst du den sizof-Operator hier nicht benutzen.

    Merke dir einfach in eine int-Variable,
    wieviel Speicher (chars) du wirklich allozierst,
    und übergib diesen int bei fgets


Anmelden zum Antworten