strcpy函数出错 求大神!!感谢!!!

调试出错在strcpy的地方
第一次循环的时候没有出错
我在内层循环的结尾为buf重新申请了地址

不知道为什么会出错 心态崩了 求大神

 char *strtok_r(char *s, const char *delim, char **save_ptr) {  
    char *token;  

    if (s == NULL) s = *save_ptr;  

    /* Scan leading delimiters.  */  
    s += strspn(s, delim);  
    if (*s == '\0')   
        return NULL;  

    /* Find the end of the token.  */  
    token = s;  
    s = strpbrk(token, delim);  
    if (s == NULL)  
        /* This token finishes the string.  */  
        *save_ptr = strchr(token, '\0');  
    else {  
        /* Terminate the token and make *SAVE_PTR point past it.  */  
        *s = '\0';  
        *save_ptr = s + 1;  
    }  

    return token;  
}  
char *strtok(char *s, const char *delim)  
{  
    static char *last;  

    return strtok_r(s, delim, &last);  
}  
int main()
{
    ifstream file("F://datastructure//studentimformation1.csv",ios::in);
    Student *studentrecord=(Student *)malloc(sizeof(Student));
    Student *pStudent=studentrecord;
    Student *head=studentrecord;
    studentrecord->next=NULL;
    char  *buf=new char[36];
    char *p[20];
    string s;
    int i=0;
    if (!file)
    {
        cout<<"open error!!"<<endl;
    }
    else
    {
        while(!file.eof())
    {
        while(getline(file,s)!=NULL)

            {strcpy(buf,s.c_str());

             int j=0;
            while((p[j]=strtok(buf,","))!=NULL)
            {
                /*switch(i%6)
                {
                case 0: printf("number");break;
                case 1: printf("name");break;
                case 2:printf("sex");break;
                case 3:printf("age");break;
                case 4:printf("birthplace");break;
                case 5:printf("GPA");break;
                }
                i++;*/
                j++;
                buf=NULL;
                }
                /*cout<<head->number<<endl;*/
                strcpy(head->number,p[0]);
                strcpy(head->name,p[1]);
                strcpy(head->sex,p[2]);
                strcpy(head->age,p[3]);
                strcpy(head->birthplace,p[4]);
                strcpy(head->GPA,p[5]);
                head->next=new Student;
                head=head->next;
                head->next=NULL;
                delete []buf;
                char  *buf=new char[36];


            }
        }
        }
    file.close();
    delete []buf;
    return 0;
    }

4个回答

好好学习一下局部变量作用域的知识。

Dee1997
Dee1997 最后的确是因为这个原因,十分感谢!
3 年多之前 回复

你结构体里面的number什么的应该不是字符串类型的吧?那这些都不对
strcpy(head->number,p[0]);
strcpy(head->name,p[1]);
strcpy(head->sex,p[2]);
strcpy(head->age,p[3]);
strcpy(head->birthplace,p[4]);
strcpy(head->GPA,p[5]);
strcpy要求里面的两个参数都是字符指针类型的

Dee1997
Dee1997 是字符串类型,我把他们都存成了字符串
3 年多之前 回复
Dee1997
Dee1997 老师布置作业说不许用标准库。。。。
3 年多之前 回复

strcpy里的两个东西要同一个类型

Dee1997
Dee1997 s.c_str() 是char型 buf也是char型的指针呀。。
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐