读取文本文件中数据到结构体中的有关问题

读取文本文件中数据到结构体中的问题
# define MAXSIZE 20 //设记录不超过20个
typedef struct { //定义每个记录(数据元素)的结构
int Sno ; //  
char *Sname;
char *Sclass;
int Sage; // 
}RecordType ;

typedef struct { //定义顺序表的结构
RecordType r [ MAXSIZE +1 ]; //存储顺序表的向量  
int length ; //顺序表的长度
}SqList ;
定义上述结构体然后从txt文件中读取数据如下
1 ss dd 1
2 ee rr 2
3 rr tt 3
保存到结构体数组中
void ReadFile(SqList &S)
{
const int LINE_LENGTH=128;//每行字符串的最大长度
ifstream fin("data.txt");
char str[LINE_LENGTH];
// string s;
char*ptr;
int i=1;
while(fin.getline(str,LINE_LENGTH))
{
//strncpy(str,s.c_str(),s.length());
int k=0; 
ptr=strtok(str," ");//截取字符串
while(ptr!=NULL)
{
switch(k)
{
case 0:
S.r[i].Sno=atoi(ptr);k++; cout<<S.r[i].Sno; break;
case 1:
S.r[i].Sname=ptr; k++; cout<<S.r[i].Sname;break;
case 2:
S.r[i].Sclass=ptr; cout<<S.r[i].Sclass; k++; break;
case 3:
S.r[i].Sage=atoi(ptr); k=0; cout<<S.r[i].Sage; break;
}  
ptr=strtok(NULL," ");
}
cout<<S.r[i].Sno<<" "<<S.r[i].Sname<<S.r[i].Sclass<<S.r[i].Sage<<endl;//这个地方输出没有问题
cout<<endl;
i++;

}
S.length=i-1;
for ( i=1;i<=S.length;i++)
{
cout<<S.r[i].Sno<<" "<<S.r[i].Sname<<S.r[i].Sclass<<S.r[i].Sage<<endl;//这个地方输出就有问题了输出如下:1 rrtt1 2rrtt2 3 rrtt3,这是为什么,并且在另一个函数中输出时对于S.r[i].Sname和S.r[i].Sclass的输出全是乱码,这是为什么
}
}

------解决方案--------------------
结构体中的成员不要用指针成员
把char*指针成员换成char[]数组
------解决方案--------------------
char *Sname;
char *Sclass;
要用定常数据:
char Sname[10];
char Sclass[10];