我制作了一个函数,可以将list
的随机框(/节点/链接)转换为 array
(连续存储器)。所有这些都是因为我试图将fwrite
list
变成file(.txt)
。
但是,当我打开文件时,所看到的只是value
字段中的单词,然后是39个空格,这些空格可以是空白,也可以是随机字符或其他。有人可以告诉我为什么会这样吗?
如何仅通过每个数组元素的value
字段(list
链接)或全部3却通过调用一次fwrite来获得结果?
struct box {
char value[20] ;
struct box * next ;
int occurs;
} ;
typedef struct box Box;
typedef Box * List;
Box* list_toarray(List mylist){
List iter=mylist;
Box *packed;
Box *dup;
dup=packed=malloc((sizeof(Box))*lenlist(mylist));
while(iter!=NULL){
memcpy(packed,iter,sizeof(Box));
packed++;//packed[1];
iter=iter->next;
if(iter!=NULL)
(packed-1)->next=packed;
else
(packed-1)->next=NULL;
}
printf("\nInput list to array(Consecutive blocks of memory) :\n");
report(dup);
return dup;
}
void fread_fwrite_lsttoarray(Box *dup){
FILE *myfile;
myfile=fopen("fwfr.txt","wt");
fwrite(dup,sizeof(Box),6,myfile);
fclose(myfile);
}
这也是我所说的function
:
fread_fwrite_lsttoarray(list_toarray(newlistasc));
其中newlistasc
是带有list
个元素的随机struct box
答案 0 :(得分:1)
在函数fread_fwrite_lsttoarray()中
更改
fwrite(dup,sizeof(Box),6,myfile);
到
fprintf(myfile, "%s, %d\n", dup->value, dup->occurs);
不要将elememt next写入文件,因为它的值在内存之外毫无意义。