2016-07-30 15 views
0

Zweck meines Programms Passing ist einfach, Folge von int Zahlen aus einer Datei zu lesen, hier ist der Code:eine nicht initialisierte Array an eine Funktion in C

int main() 
{ 
    FILE *file = fopen("test.txt", "r"); 

    int *array = NULL; // Declaration of pointer to future array; 
    int count; 

    process_file(file, array, &count); 

    return 0; 
} 

// Function returns 'zero' if everything goes successful plus array and count of elements as arguments 
int process_file(FILE *file, int *arr, int *count) 
{ 
    int a; 
    int i; 
    *count = 0; 

    // Function counts elements of sequence 
    while (fscanf(file, "%d", &a) == 1) 
    { 
     *count += 1; 
    } 

    arr = (int*) malloc(*count * sizeof(int)); // Here program allocates some memory for array 

    rewind(file); 

    i = 0; 
    while (fscanf(file, "%d", &a) == 1) 
    { 
     arr[i] = a; 
     i++; 
    } 

    fclose(file); 

    return 0; 
} 

Problem ist, in der äußeren Funktion (Haupt-), array habe nicht geändert. Wie könnte es behoben werden?

Antwort

4

Sie müssen das Array als Referenz übergeben, damit die Funktion das Array des Aufrufers ändern kann.

Es muss sein:

process_file(FILE *file, int **arr, int *count) 

und rufen Sie wie folgt:

process_file(file, &array, &count); 

Zusätzlich würde ich vorschlagen:

+1

Sollte das nicht sein "* Array = malloc (* Anzahl * Größe von ** Array);"? –

+0

Danke, es funktioniert mit einigen Anpassungen: Um dem Element des Elements in der Funktion einen Wert zuzuweisen, muss ich es so machen (* Array) [i] = Wert – JacobLutin