2014-02-12 2 views
0

поэтому сначала я создаю свой-структуру:Напишите и прочитайте структуру в C?

STRUCT интерес * р = таНос (256);

и назначьте переменные внутри структуры:

p -> num = 1; 
    p -> size = 2; 
    p -> name = "jacky"; 

После того как я открытые компанией мой выходной файл, я пишу эту структуру к нему:

fwrite(&p,sizeof(p), 1, output_file); 

Вот мой первый вопрос, если я хотите написать struct p, помещает ли это как «& p» правильно?

Предположим, что я успешно написал его, и я хочу знать, как читать структуру из моего файла output_file. я затем перейти к:

...#open the outputfile for reading 

структуры интерес * бафф = таНос (256);

fread (& buff, sizeof (buff), 1, output_file);

Затем я получаю ошибку segamentation при попытке печати баффа Num или размер ..

Что это правильный способ сделать это?

Причина, по которой я хочу ее распечатать, заключается в том, что я хочу проверить, действительно ли я написал эту структуру в выходной файл.

Спасибо.

+0

Можете ли вы опубликовать минимальную программу, которая воспроизводит вашу ошибку, а не только несколько строк кода? – Bert

ответ

0

Ошибка 1)

Вы косяк делать:

p -> name = "jacky" 

Использование:

strcpy(p->name, "jacky"); 

вместо этого.

Ошибка 2)

Struct имеет фиксированную длину, и вы выделение 256 байт на него? Возможно, что вы хотели это:

struct interest *p =malloc(sizeof(struct interest)); 

Ошибка 3)

Использование:

fwrite(p,sizeof(struct interest), 1, output_file); 

р уже указатель

Опубликовать Ваше объявление структура. У вас может быть больше проблем.

+0

Спасибо! что, если имя - это указатель? И я хочу, чтобы имя указывало на «гей»? – Pig

+0

@LesbianSquirtle в этом случае было бы правильно. – Fernando

+0

Если имя самого указателя использует: strcpy (name, "jacky"); – Abend

0

Во-первых, вы должны сделать

p = malloc(sizeof(struct interest)) 

Во-вторых, p и buff уже указатели, вы должны написать:

fwite(p, sizeof(struct interest), fp) 
fread(buff, sizeof(struct interest), fp) 

Finnally, чтобы скопировать строку, вы должны написать

<string.h> 
strncpy(p->name, "jacky", sizeof(p->name)) 
+0

Спасибо! Для первого я должен объявить p как «struct packet * p;» первый? Кроме того, что, если имя - это указатель? И я хочу, чтобы имя указывало на «гей»? – Pig

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