原文连接:http://blog.csdn.net/yuanfen127/archive/2005/12/23/560633.aspx程序有两个错误第一sprintf(l_tmpstr,"select * from CUPSCTL order by dc_preind");由于dc_preind字段是CHAR(12 BYTE),因此这样的order by并不能保证卡BIN是按照位数长度排列的第二if ( 0 == memcmp(l_card_bin,local_cupsctl[j].dc_preind,i) )这样处理是看短不看长,如果l_card_bin是955881,而local_cupsctl[j].dc_preind是95588111,但是由于i是l_card_bin的长度,因此仍然认为这个memcmp返回0修改处理一、sprintf(l_tmpstr,"select dc_preind,des,to_number(dc_preind) from CUPSCTL order by 3");在选择的字段后面加上to_number(dc_preind)把这些文本类型转换成数值类型,再根据这个字段位置进行排序,确保按照卡BIN长度位数从少到多放入到内存数组中二、整个循环只使用一个既可,修改如下: /*错误的 for ( i = 12 ; i > 5 ; i -- ) { memset(l_card_bin,' ',sizeof(l_card_bin)); memcpy(l_card_bin,v_tcard_no,i); /*把卡号前i位复制给l_card_bin*/ for ( j=local_cupsctl_cnt; j >= 0 ; j--)/*数组中的CUPSCTL是否有此BIN*/ { if ( 0 == memcmp(l_card_bin,local_cupsctl[j].dc_preind,i) ) { memcmp(v_cupsctl,&local_cupsctl[j],sizeof(CUPSCTL)); stop_flag = 1; break; } }
if ( 1 == stop_flag ) { break; } } */
memset(l_card_bin,' ',sizeof(l_card_bin)); memcpy(l_card_bin,v_tcard_no,i); /*把卡号前i位复制给l_card_bin*/
for ( j=local_cupsctl_cnt-1; j >= 0 ; j--)/*数组中的CUPSCTL是否有此BIN*/ { if ( 0 == memcmp(l_card_bin,local_cupsctl[j].dc_preind, strlen(local_cupsctl[j].dc_preind)) ) /*按长的判断*/ { memcpy(v_cupsctl,&local_cupsctl[j],sizeof(CUPSCTL)); stop_flag = 1; break; } }
if ( 1 == stop_flag ) { break; }