/**************************************************************************************** ******功 能:遍历哈希表获取所有的用户名和电话号码 ******输入参数:userName表示要查询的用户名 ****** phoneNumberFound 用来存放查找到的电话号码(由调用者保证空间足够大) ******返 回 值:-1参数错误,0成功遍历,遍历结果放到全局变量userAndPhone内 *****************************************************************************************/ int getAllUserAndPhone() { if (userCnt <= 0) { printf("invalid userCnt[%d].\n", userCnt); return ERROR_PARAMETER; } /* 先清空已保存的userAndPhone */ if (NULL != userAndPhone) { free(userAndPhone); userAndPhone = NULL; } userAndPhone = (UserAndPhone*)malloc(userCnt * sizeof(UserAndPhone)); PhoneBook *s, *tmp; int i = 0; HASH_ITER(hh, users, s, tmp) { if (i == userCnt) /* 保证数组不越界 */ { return SUCCESS; } strcpy(userAndPhone[i].userName, s->userName); strcpy(userAndPhone[i].phoneNumber, s->phoneNumber); ++i; } return SUCCESS; } /**************************************************************************************** ******功 能:删除哈希表以及已遍历的所有的用户名和电话号码 ******输入参数:无 ******返 回 值:0成功删除 *****************************************************************************************/ int deleteAllUserAndPhone() { if (NULL != userAndPhone) { free(userAndPhone); userAndPhone = NULL; } PhoneBook *s, *tmp; /* free the hash table contents */ HASH_ITER(hh, users, s, tmp) { HASH_DEL(users, s); free(s); } userCnt = 0; users = NULL; return SUCCESS; }