Таким образом, цель этого фрагмента кода заключается в чтении в числах из файла, представляющего коэффициенты многочлена. Количество цифр не известно заранее. В каждой строке есть один «полином». Пример файла, который я читаю ниже.C int не сохраняется
Polynomails.txt
1 2 0 0 5
7.0 0 0 0 -2.25 1.13
В настоящее время основным проверяет только то, что имя файла было дано, и что она может быть открыта, а затем вызывает ReadPoly, как показано ниже. BUFFSIZE определяется как 256 с инструкцией define в этом файле.
void ReadPoly(FILE* InputFile){
polynomial poly;
double complex *coef;
char *p, *buffer;
unsigned int terms;
buffer = (char*) malloc(BUFFSIZE);
while(fgets(buffer,BUFFSIZE,InputFile)){
coef = (double complex*) malloc(BUFFSIZE*sizeof(double complex));
terms = 0;
p = strtok(buffer, " ");
while(NULL != p){
coef[terms] = atof(p);
terms++;
p = strtok(NULL, " ");
}
coef = (double complex*) realloc(coef,(terms*sizeof(double complex)));
printf("terms provided to init: %d\n",terms);
createPoly(&poly,terms);
poly.polyCoef = coef;
printf("terms in struct: %d\n",poly.nterms);
}
free(buffer);
}
И вот функция createPoly и объявление полиструктуры.
typedef struct
{
unsigned int nterms; /* number of terms */
double complex *polyCoef; /* coefficients */
} polynomial;
void createPoly(polynomial *p, unsigned int nterms){
double complex terms[nterms];
p = (polynomial*) malloc(sizeof(polynomial));
p->nterms = nterms;
p->polyCoef = terms;
printf("In createPoly, nterms: %d\n",p->nterms);
}
Теперь от того, что я могу сказать, все номера считываются в правильно, но значение nterms в структуре не работает, как ожидалось. Вот результат, когда я запускаю это. Стоит отметить, что даже при том же вводе данных значение «terms in struct» не всегда одинаково.
terms provided to init: 6
In createPoly, nterms: 6
terms in struct: 1075624960
terms provided to init: 5
In createPoly, nterms: 5
terms in struct: 1075624960
Моя единственная, хотя в том, что поле polyCoef из структуры как-то писать над полем nterms но без фиксированных размеров (которые не вариант) Я не уверен, как поступить.
Не выставлять результат malloc/calloc/realloc в C] (http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc). –
'buffer = (char *) malloc (BUFFSIZE);' если BUFFSIZE является постоянным, было бы лучше использовать 'char buffer [BUFFSIZE];' –