2015-06-11 3 views
-1

Я смотрел на как 5 постов и до сих пор не могу понять, если это возможно ....C Определение размера массива внутри основной для структуры

typedef struct { 
    long double xc; 
    long double yc; 
    long double zc; 
    long double radio; 
    long double Kd; 
    long double Ka; 
    long double Ks; // specular 
    color fc; 
} SPHERE; 

// *array_of_spheres; // Original line omitted SPHERE 

SPHERE *array_of_spheres; 

int main(int argc, char** argv) { 

    int number_spheres = read_file(); 
//this return the number of spheres in the text file after fscanf 

    array_of_spheres = malloc(sizeof(SPHERE)*number_spheres); 
    . 
    . 
    . 
    . 
} 

Как вы видите, что нужно list_of_spheres быть глобальным, но я не знаю размер, пока не прочитаю файл, так как я могу инициализировать этот массив?

error: expected primary-expression before ‘)’ token 
array_of_spheres = malloc(sizeof(SPHERE)*number_spheres); 

Я попытался sizeof(SPHERE) И sizeof(*SPHERE).

Исходный код находится в испанском в .h

typedef struct 
{ 
    long double xc; 
    long double yc; 
    long double zc; 
    long double radio; 
    long double Kd; 
    long double Ka; 
    long double Ks; // especular 
    color fc; 
}esfera; 

esfera *lista_esferas; 

в .c после я прочитать файл и вычислить количество сфер:

lista_esferas = malloc(sizeof(*esfera)*cantidad_de_esferas); 

          ^

RayT.c: 29 : 40: ошибка: ожидаемое первичное выражение перед ')' токеном lista_esferas = malloc (sizeof (* esfera) * cantidad_de_esferas);

+0

Wrong предложение! И не бросайте 'malloc()', это плохая практика. –

+0

Ваш испанский код не соответствует вашему английскому коду. Почему у вас есть '*' в 'sizeof (* esfera)' ??? Что это такое делает? Это должно быть просто 'sizeof (esfera)' или лучше 'sizeof * lista_esferas'. – AnT

+0

Вам нужно либо 'sizeof (esfera)', либо 'sizeof (* lista_esferas)' или 'sizeof (lista_esferas [0])'. Вы не можете дешифровать не указатель, а 'esfera' - это простой тип структуры, а не тип указателя. –

ответ

2

Ваша глобальная переменная декларация array_of_spheres неправильно, должно быть как ниже

SPHERE *array_of_spheres; 
+0

Не переводите свой код, публикуйте исходный код с оригинальной версией. –

+0

ok Я добавил код на испанский язык .. не вижу, как это делает какое-либо уважение, я просто изменяю имена, чтобы их было более читаемыми – user2997958

+0

@ user2997958 ваш malloc ошибочен, если этот 'lista_esferas = malloc (sizeof (* lista_esferas) * cantidad_de_esferas); ' – Tim

Смежные вопросы