C++文件读写(有关字符指针)

vini707310630 2008-12-19 11:36:06
写一个单链表的程序,读文件时int 型数据都能正确读入,但字符指针不知该怎么读入?结构体定义和读文件的函数如下:
struct StuInfo
{
int nId;
char* strName;
int nSocre;
};

struct Student
{
StuInfo data;
Student* next;
};

void ReadFile(Student* head) // head 为头指针
{
char file[256];
cout<<"请输入文件路径:"<<endl;
cin>>file;
FILE* fp=fopen(file,"r");
if (!fp)
{
cout<<"打开文件失败!"<<endl;
return;
}
Student* newNode=new Student;
memset(&newNode,0,sizeof(Student));
while (!feof(fp)&&fread(&newNode->data,sizeof(StuInfo),1,fp)==1)//如果未读到文件尾且读取成功,则将数据插入链表
{
newNode->next=head->next;
head->next=newNode;
}
delete newNode;
fclose(fp);
}

哪位高手能指出该怎样解决,即能对char* 的字符指针赋值。
...全文
465 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
vini707310630 2008-12-20
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 xiaokousky 的回复:]
四处问题
1、memset(&newNode,0,sizeof(Student));  //把newNode前面的引用去掉
2、while循环前面new出来的一个节点,把该节点的地址赋值给head
3、while循环体内要建立链表,需要new 新的节点
4、从文件读出的数据,要写代码依次赋值给StuInfo结构体成员
[/Quote]
你指出的错误我明白了,那些都还好。不一定要一个一个赋值,我觉得还是把新建的节点插入到连表中比较好。
关键是这个:

sizeof(StuInfo)有问题

得到的大小是两个int和一个char*指针的大小,并没有包含字符串[b]

都底该处理这个问题?


xiaokousky 2008-12-20
  • 打赏
  • 举报
回复
四处问题
1、memset(&newNode,0,sizeof(Student)); //把newNode前面的引用去掉
2、while循环前面new出来的一个节点,把该节点的地址赋值给head
3、while循环体内要建立链表,需要new 新的节点
4、从文件读出的数据,要写代码依次赋值给StuInfo结构体成员
vini707310630 2008-12-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lann64 的回复:]
memset(&newNode,0,sizeof(Student)); //这是干什么?

为什么要写字符指针到文件里?从设计上就有问题。
对于这些指针应该根据读入信息重新建立,而不是用文件保存,下次读入。
每次程序运行地址都是不一样的,指针本身的内容都需要重新建立。

[/Quote]
memset用来初始化数据,这里应该可以没有。
为什么有指针就不能这样读取文件到链表中?
vini707310630 2008-12-19
  • 打赏
  • 举报
回复
读取文件之前肯定不知道字符的大小,如果要这样用该怎么写(用字符指针)?
还有是不是这种情况用字符数组更好?
星羽 2008-12-19
  • 打赏
  • 举报
回复
你的文件格式是则么样的?

其实你的结构

struct StuInfo
{
int nId;
char* strName;
int nSocre;
};

有问题,
sizeof(StuInfo)

得到的大小是两个int和一个char*指针的大小,并没有包含字符串
首先的问题是要知道你的文件中数据是什么存的,才能解决怎么读

lann64 2008-12-19
  • 打赏
  • 举报
回复
char* 这个一般是用来指向字符串的,文件里应该保存字符串的内容,而不是这个char*指针
lann64 2008-12-19
  • 打赏
  • 举报
回复
memset(&newNode,0,sizeof(Student)); //这是干什么?

为什么要写字符指针到文件里?从设计上就有问题。
对于这些指针应该根据读入信息重新建立,而不是用文件保存,下次读入。
每次程序运行地址都是不一样的,指针本身的内容都需要重新建立。
wuyu637 2008-12-19
  • 打赏
  • 举报
回复
你先要给char*变量分配一些内存,才能给他使用啊。


char* buffer = new char[100];
strcpy(buffer,"hello world");

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧