我用C做了一个电话簿程序(带有dinamical结构等).
它在linux下完美运行但是当我尝试在Windows中运行它(在devc ++中编译之后)它启动正常但是在我向列表中添加一些数据之后它就停止并退出.这只是通过向电话簿添加新数据而发生的.当我使用其他功能时,没有中断等等.
在我附加的模块的开头windows.h和conio.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)
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 buf或sizeof (buf)替代,或者可以定义:
#define BUF_SIZE 128
Run Code Online (Sandbox Code Playgroud)
我没有检查其余的.
| 归档时间: |
|
| 查看次数: |
211 次 |
| 最近记录: |