Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ Си файли

Автор: Турбонуб 19.03.2007 2:47

Всем доброго времени суток, у меня следущая проблема, не выводиться на экран текст записей из файла, если раскоментировать указаный в тексте код, тогда выводиться но не то что надо:


#include <stdio.h>
#define base_size 50
struct writer {
char *lastname;
char *id;
char *bookname;
int yearofedition;
};

int main() {
FILE *p_file, *e_file;
unsigned short int n_in;
writer *e_avtor, *t_avtor;
p_file = fopen("P.dat", "wb");
e_avtor->lastname="Shevchenko"; e_avtor->id="T.G."; e_avtor->bookname="Kobzar"; e_avtor->yearofedition=1830;
n_in = fwrite(e_avtor, sizeof(*e_avtor), 1, p_file);
e_avtor->lastname="Tolstoj"; e_avtor->id="I.V."; e_avtor->bookname="War and Peace"; e_avtor->yearofedition=1879;
n_in = fwrite(e_avtor, sizeof(*e_avtor), 1, p_file);
e_avtor->lastname="Perymov"; e_avtor->id="A.B."; e_avtor->bookname="Matrx"; e_avtor->yearofedition=1930;
n_in = fwrite(e_avtor, sizeof(*e_avtor), 1, p_file);
fclose(p_file);

if((p_file = fopen("P.dat","rb")) == NULL) {
fprintf(stderr,"Can not open file\n");
return 1;
}
int number_of_record = 0;
writer *w_temp[base_size];
printf("%c",'\n');

while(!feof(p_file)) {
if ( fread(w_temp[number_of_record], sizeof(*w_temp), 1, p_file) /*== sizeof(*w_temp)*/ ) { // <- вот здесь
printf("%s\n", w_temp[number_of_record]->lastname);
++number_of_record;
}
}//printf();
//for(int i=0;i<base_size;i++)

return 0;
}



Автор: Алена 19.03.2007 4:02

...
writer *w_temp[base_size]; // описать-то ты массив описываешь, а выделять место кто будет?

int ix;
for(ix = 0; ix < base_size; ++ix)
w_temp[ix] = new writer; // выделяем место

printf("%c",'\n');
while(!feof(p_file)) {

// размер структуры, а не элемента массива
if ( fread(w_temp[number_of_record], sizeof(struct writer), 1, p_file) )
printf("%s\n", w_temp[number_of_record]->lastname);
++number_of_record;
}
}
...

Автор: Гость 19.03.2007 4:29

Спасибо вам, теперь все понятно