2015-02-19 1 views
-1

Я продолжаю получать ошибку seg, и я хочу использовать двойные указатели. У меня есть указатель на указатель на структуру, и я не знаю, как я могу сканировать двойной указатель на указатель, указывающий на структуру.Как сканировать в указатель, указывающий на указатель структуры в c?

int main(int argc, char* argv[]) 
{ 
    if(argc != 4) // Error checks to make sure for correct number of arguments 
    { 
     printf("Incorrect number of arguments\n"); 
     return 0; 
    } 

    Car* garage69; 
    Car** garage = &garage69; 

    int length; 
    int *size; 
    size = &length; 

    fill_garage(garage, argv[1], size); 

    return 0; 
} 

void fill_garage(Car** garage, char* cars, int* size) 
{ 
    FILE* input = fopen(cars, "r"); 

    fscanf(input, "%d", size); 

    printf("this is size %d \n", *size); 

    *garage = malloc(sizeof(Car)**size); 

    int i; 

    for(i=0; i<*size; i++) 
    { 
     (*garage[i])[i].make = malloc(sizeof(char)*MAX_STRING_LEN); 
     (*garage[i]).model = malloc(sizeof(char)*MAX_STRING_LEN); 
     fscanf(input, "%d %s %s %d", (*garage[i]).year, (*garage[i]).make, 
      (*garage[i]).model, (*garage[i]).miles); 

    } 

    fclose(input); 
} 

ответ

0
(*garage[i])[i].make = malloc(sizeof(char)*MAX_STRING_LEN); 

, вероятно, следует

(*garage)[i].make = malloc(sizeof(char)*MAX_STRING_LEN); 

Кроме того, это, вероятно, будет более чистый дизайн, чтобы иметь fill_garage() возвращение Car *, а не возвращать void и используя Car ** аргумент для получения возвращаемого значения ..