从文件扫描到结构

时间:2014-12-08 08:36:34

标签: c

在将数组中的值赋给对象成员时出现问题 这是我的代码

这是分段错误,但我不明白为什么 我无法从编译中获得任何消息 该程序只会崩溃 感谢

FILE * openRead(char fName[]);
int setArray(FILE *fp, struct salesPerson* sRec[]);
#define EMPLOYEES 8

int main(){

FILE *fp=openRead("sales.dat");
struct salesPerson *instance[EMPLOYEES];
setArray(fp,instance);

return 0;

}

FILE * openRead(char fName[]){  //READS
FILE *fp;
fp=fopen(fName,"r");
if ((fp != NULL)){
   // printf("return succ");
    return fp;
}else{
    return 0;
}
}

int setArray(FILE *fp, struct salesPerson* sRec[]){

int  i,num[30],lpay[30];
char fname[30][30];
char lname[30][30];
double amount[30];
for (i=0;i<=EMPLOYEES;i++){
//while (!feof(fp)){
    if(fscanf(fp,"%d:%[^:]:%[^:]:%d:%lf",&num[i],lname[i],fname[i],&lpay[i],&amount[i]) != EOF){

    strcpy(sRec[i]->lastName,lname[i]);
    //strcpy(sRec[i]->firstName,fname);
    //sRec[i]->salesLevel=*lpay;
    //sRec[i]->salesAmount=amount;
    //printf("%s",sRec[i]->lastName);
    //if(fscanf(fp,"%d:%[^:]:%[^:]:%d :%f",&num,fname,lname,&payl,&amount) != EOF){

    printf("%s \n",fname[i]);
 }
    }
 return i;
 }

3 个答案:

答案 0 :(得分:2)

你的指针并没有指向有效的地方。

struct salesPerson *instance[EMPLOYEES];
setArray(fp,instance);

instance[0](以及所有其他指针)指向哪里?

答案 1 :(得分:1)

在向它写东西之前,你需要为你的指针分配内存。喜欢

instance[0] = malloc(sizeof(struct salesPerson));

答案 2 :(得分:0)

for (i=0;i<EMPLOYEES;i++){// "<=" should be "<" 
    if(fscanf(fp,"%d:%[^:]:%[^:]:%d:%lf",&num[i],lname[i],fname[i],&lpay[i],&amount[i]) != EOF){
        sRec[i] = malloc(sizeof(struct salesPerson));//allocate structure
        strcpy(sRec[i]->lastName,lname[i]);
        //set to member of sRec ... 
    } else 
        break;
}