gpt4 book ai didi

C - 如何将链表指针内容写入文本文件

转载 作者:太空宇宙 更新时间:2023-11-04 05:15:39 25 4
gpt4 key购买 nike

我有一个包含指针数组的程序,例如:

INTLIST* myArray[countOfRows];

每个myArray指针指向一个链表,基本上就是一个M*N的矩阵。

例如:

3 2 1
2 1 0
1 9 8

所以 myArray[0] 是一个链表,其中 3->2->1myArray[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!

关于C - 如何将链表指针内容写入文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2129676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com