bool stringList::writeToFile(FILE* f)
{
if(NULL==f)
return false;
//把numNode和stringList中的字符串输出到文件
fprintf(f,"%d",numNode);
stringNode* pTemp=pFirst;
while(true)
{
if(NULL==pTemp)
break;
fprintf(f,"%s",pTemp->pStr);
pTemp=pTemp->pNext;
}
return true;
}
bool stringList::readFromFile(FILE* f)
{
if(NULL==f)
return false;
//结点个数置0,并清除字符串链表
//从文件中读出numNode和字符串
cleanList();
fscanf(f,"%d",&numNode);
char s[MAX_STRING_LENGTH];
for(int i=0;i<numNode;i++)
{
fscanf(f,"%s",s);
appendStringNode(s);
}
return true;
}
在我的main函数中,
stringList sl;
sl.appendStringNode("11111");
sl.appendStringNode("22222");
sl.appendStringNode("33333");
FILE* f;
f=fopen("file","wb");//我也试过fopen("file","w");
sl.writeToFile(f);
fclose(f);
f=fopen("file","rb");//我也试过fopen("file","r");
sl.readFromFile(f);
fclose(f);
for(int i=0;i<sl.getLength();i++)
{
printf("%s\n",sl.at(i));
}
但是有问题,我用gdb调试进去后发现,连numNode的值读的就不对.因为numNode指示stringList中字符串的个数,所以连着后面的程序也错了.
$ more file
3111112222233333
哪位高手帮帮忙啊?
writeToFile方法中,fprintf(f,"%s",pTemp->pStr);之后没有再给这个字符串一个分割符,所以它就和下一个连在一起了,前面的fprintf(f,"%d",numNode);也是这样。
所以,在每一个fprintf之后,再加一个输出空格的语句。