我有一个包含指针数组的程序,例如:
INTLIST* myArray[countOfRows];
每个myArray
指针指向一个链表,基本上就是一个M*N的矩阵。
例如:
3 2 1
2 1 0
1 9 8
所以 myArray[0]
是一个链表,其中 3->2->1
和 myArray[1]
是一个链表2->1->0..
等等。我有一个打印矩阵的函数,它基本上是这样做的:
for(int i = 0; i<countOfRows; i++)
list_print(myArray[i]);
然后我的 list_print 函数是这样的:
void list_print(INTLIST* list)
{ /* This function simply prints the linked list out */
INTLIST* temp=NULL; //temp pointer to head of list
/* loops through each node of list printing its datum value */
for(temp=list; temp!=NULL; temp=temp->next)
{
printf("%d ", temp->datum); //print datum value
}
printf("\n");
}
一切都很好,工作正常,(我知道我可以优化和清理,我保证会这样做)。现在我的下一个问题是我需要将这个矩阵写到一个文本文件中。所以我尝试了这个:
char* outputFileName = "out.txt";
FILE* ofp;
ofp=fopen(outputFileName, "w");
if(ofp == NULL)
{
printf("Cannot open writeable file!");
return -1;
}
for(i=0; i<fileLineCount; i++)
{
fprintf(ofp, list_print(aList[i]);
}
但我认为事情没那么简单。谁能告诉我如何将其打印到文本文件中...
谢谢
使用 FILE *
参数在 list_print
函数中使用 fprintf
函数,如示例所示:
void list_print(INTLIST* list, FILE *fp)
{ /* This function simply prints the linked list out */
INTLIST* temp=NULL; //temp pointer to head of list
/* loops through each node of list printing its datum value */
for(temp=list; temp!=NULL; temp=temp->;next)
{
fprintf(fp, "%d ", temp->datum); //print datum value
}
fprintf(fp, "\n");
}
可以这样做:
int main(){
FILE *fp;
fp = fopen("data.txt", "w");
for(i=0; i<fileLineCount; i++)
{
list_print(alist[i], fp);
}
fclose(fp);
}
或者
如果您希望将链表的二进制转储从内存保留到磁盘(这是解释它的简单方法),请先考虑一下:
for(i=0; i<fileLineCount; i++)
{
fwrite(alist[i], sizeof(alist[i]), 1, ofp);
}
然后在读取时,
for(i=0; i<fileLineCount; i++)
{
fread(&alist[i], sizeof(alist[i]), 1, ofp);
}
编辑: 我犹豫要不要包含上面的内容,但是 paxdiablo 指出了我的fread(... )
和 fwrite(...)
上面的代码,并意识到他是对的。在对链表进行二进制写入时,链表中的内存地址引用在下次读取时将失效。 谢谢 paxdiablo!
我是一名优秀的程序员,十分优秀!