C程序 - 在linux下工作; Windows中的运行时故障

Nat*_*amm -2 c linux windows

我用C做了一个电话簿程序(带有dinamical结构等).

它在linux下完美运行但是当我尝试在Windows中运行它(在devc ++中编译之后)它启动正常但是在我向列表中添加一些数据之后它就停止并退出.这只是通过向电话簿添加新数据而发生的.当我使用其他功能时,没有中断等等.

在我附加的模块的开头windows.hconio.hfor getch()systen("cls").也许我使用了Windows中不允许的某些功能或像这样的smth.

这是我的第一个c项目,通常我在linux上工作,那么我该怎么做呢?

/*SCREEN*/
#ifdef __WIN32__                                           /*for Windows*/
#include<windows.h>
#define GETCH printf("press ENTER...\n");getch() 
#define CLEAR system("cls")
#endif
#ifdef __unix__                                             /*for unix*/
#include<unistd.h> 
#define GETCH printf("\n\npress ENTER...");getchar()
#define CLEAR system("clear")
#endif
Run Code Online (Sandbox Code Playgroud)

我也以同样的方式添加名称和pnonenumber

printf("++ ADD DATA: ++\n");
         /*LASTNAME*/
                 printf(">> add lastname :  ");
                 fgets(buf,128,stdin);
                 lastname = malloc(strlen(buf));     /*allocate memory for lastdane*/ 
                 if( lastname != NULL)               /*successful allocation*/
                 {
                   strcpy( lastname, buf );          /*copy data from buf to lastname variable*/
                   lastname[strlen(lastname)-1]='\0';/*get the number of elements and add '\0' at the end*/
                 }
                 else                                /*allocation failed*/
                 {
                   printf("Memory Allocation Error!");
                 }
                 memset(buf,0,128);    
Run Code Online (Sandbox Code Playgroud)
void AddDATAsorted( char* lastname, char* firstname, char* telnumber )
{
  tDATA* pDATA;

  if( pTELBOOK )
  {
      pDATA = malloc( sizeof( tDATA ));         /*allocate memory for new item*/

      pDATA->lastname   = lastname;    
      pDATA->firstname  = firstname;
      pDATA->telnumber  = telnumber;

      addItemToList( pTELBOOK, pDATA, fcmp );   /*add a new item sorted - see list.c*/
  }
} /*END 6*/
Run Code Online (Sandbox Code Playgroud)

它在另一个模块中.


int fcmp( void* pItemList, void* pItemNew )
{
  tDATA* pDATA_list;
  tDATA* pDATA_new;
  int diff;

  if( pItemList != NULL ) 
  {
      pDATA_list = ( tDATA* ) pItemList;          /*because void-pointer  */
      pDATA_new  = ( tDATA* ) pItemNew;

      diff = strcmp( pDATA_list->lastname, pDATA_new->lastname );
      if( diff != 0 ) return diff;
      else                                        /*if items have the same lastname*/                                    
      {
          diff = strcmp( pDATA_list->firstname, pDATA_new->firstname );
          if( diff != 0 ) return diff;
          else                                    /*if items have also the same firstname*/
          {
              diff = strcmp( pDATA_list->telnumber, pDATA_new->telnumber );
              if( diff != 0 ) return diff;
              else  return FAIL;                  /*if items - equal*/
          }
      }
  }
  else return OK;
Run Code Online (Sandbox Code Playgroud)

调试器总是显示smth错误在这里...

/*2*功能:删除数据*/

int RemoveDATA( void )
{
  tDATA* pDATA = NULL;
  if( pTELBOOK == NULL ) return FAIL;       
  else                                      /*if pTELBOOK's current element - not empty - free allocated memory*/
  {
     if( pTELBOOK->pCurr != NULL )
     { 
           pDATA = pTELBOOK->pCurr->pItem;
           free( pDATA->lastname );
           free( pDATA->firstname );
           free( pDATA->telnumber );
           free( pTELBOOK->pCurr->pItem );
           RemoveItem( pTELBOOK );            /*and remove element from the list*/
           return OK;                        
     }
  }
} /*END 2*/
Run Code Online (Sandbox Code Playgroud)

Shi*_*zou 5

             lastname = malloc(strlen(buf)); /* problem */ 
             if( lastname != NULL)
             {
               strcpy( lastname, buf);
               lastname[strlen(lastname)-1]='\0';
             }
Run Code Online (Sandbox Code Playgroud)

使用strdup.姓氏的长度比所需的长一个.这可能是一个问题:

       lastname = strdup(buf);
Run Code Online (Sandbox Code Playgroud)

此外,你不应该使用128或其他什么.使用sizeof bufsizeof (buf)替代,或者可以定义:

             #define BUF_SIZE   128
Run Code Online (Sandbox Code Playgroud)

我没有检查其余的.