number太小了!
给分吧!!!!!

解决方案 »

  1.   

    char str[number];定义得不太合理,我不知道你的表结构是什么,但是这里很可能造成内存越界访问,还有,table.SeekRecord(hwnd,choosenumber),返回的是一个字符串吗,感觉你这段程序里,变量混乱,有些变量未使用或者保持常数。
      

  2.   

    table.SeekRecord返回的是一个指向字符串的指针.Table的定义如下:struct Node{
        char str[8];
    Node *next;
    };class Table
    {
       
       private:  Node *table;
       public:
    Table(){table=0;}; //构造函数
    int TableSize(); //得到链表的长度
    void DispRecord(); //显示记录
    void InsertRecord(char str[8]); //插入记录
    void DeleteRecord(HWND,int number); //删除记录
    char *SeekRecord(HWND,int number); //查询结果
    void SaveFile(HWND); //保存文件
    void ReadFile(HWND); //读取文件
    };int Table::TableSize()
    {
    Node *cp=table;
    int i=0;
    while(cp!=0)
    {
    i++;
    cp=cp->next;
    }
    return i;
    }void Table::DispRecord()
    {
    /* Node *cp=table;
    if(cp==0)
    {
    MessageBox(hwnd,
    cout<<"No record"<<endl;
    }
    while(cp!=0)
    {
    cout<<cp->str<<endl;
        cp=cp->next;
    }
    return;
    */
    }void Table::InsertRecord(char str[8])
    {
    Node *np,*cp;
    np=new Node;
    int size;
    size=TableSize();
    //cout<<size<<endl;
    strcpy(np->str,str);
    np->next=0;
    if(table==0)
    table=np;
    else
    {
    cp=table;
    while(cp->next!=0)
    {
    cp=cp->next;
    }
          cp->next=np;
    }
    }
    void Table::DeleteRecord(HWND hwnd,int number)
    {
    int i=0;
    Node *cp,*np=0;
    np=cp=table;
    if(cp==0)
    {
    MessageBox(hwnd,"没有记录可以删除","错误",MB_OK);
    return;
    }
    while(cp!=0)
    {
    i++;
    if(i==number)
    break;
    else
    {
    np=cp;
        cp=cp->next;
    }
    }
    if(np==0)
    {
    //np=table;
    table=table->next;
    //delete np;
    }
    else
    np->next=cp->next;
    }char * Table::SeekRecord(HWND hwnd,int number)
    {
    int i=0,tablesize;
    Node *cp;
    tablesize=TableSize();
    if(number>tablesize||number<0)
    {
    MessageBox(hwnd,"你输入的序号不对","错误",MB_OK); exit(0);
    }
    cp=table;
    //MessageBox(hwnd,"Seekreocrd","ok",MB_OK);
    while(cp!=0)
    {
    i++;
    if(i==number)
    break;
    cp=cp->next;
    }
    return cp->str ;
    }void Table::SaveFile(HWND hwnd)
    {
    FILE *fp;
    Node *cp;
    int i=0;
    fp=fopen("pealcard.dat","wb+");
    if(fp==0)
    {
    MessageBox(hwnd,"不能打开文件","错误",MB_OK); }
    cp=table;
    while(cp!=0)
    {
        fwrite(cp->str,sizeof(cp->str),1,fp);

        cp=cp->next;
    }
       fclose(fp);}void Table::ReadFile(HWND hwnd)
    {
    FILE *fp;
    char str[8]; fp=fopen("d:\\card.dat","rb+");
    if(fp==0)
    {
    MessageBox(hwnd,"不能打开文件","错误",MB_OK);
    exit(0);
    }
       
          while(!feof(fp))
      {
      if(fread(str,sizeof(str),1,fp)!=0)   {
      InsertRecord(str);
      }
         } fclose(fp);
    }
      

  3.   

    declare a global variable: char mystr[8];
    when you seek record: strcpy(mystr, cp->str);
    then return mystr.
    try!
      

  4.   

    那你最好用strncpy指定拷贝的长度,指定为8,或者在Insert时,让字符串以'\0'结束,且保证实际数据内容<=7,因为'\0'需要占用一个字节,这样就可以用strcpy了,strcpy拷贝时是以源串的'\0'结束符为止的。