release 版本格式: x.x.xxx
目的 : 1.1.066 以及 1.1.66 ,程式都能認定同一版本。
(為了防止開發者少填1個0,也就是1.1.66)
(少填1個0,會使strncmp 1.1.66 > 1.1.066)
(我是覺得公司都已經規定格式了,1.1.66不就不被允許嗎..)
(但上層總是想得比我們下面的人多拉~)
(所以我用了每小數點為分隔來求出每個數字來比)
(因此就能認定1.1.066 == 1.1.66了)
version 會存在既定 array(a_version, b_version)因為到時寫成 fun傳入來源指標
用strtok系列會改變來源位址,所以用a_version, b_version既定來存
char a_version[] = "1.1.066";
char b_version[] = "1.1.66";
char *a_ptr = NULL;
char *b_ptr = NULL;
char *p,*q;
int i = 0;
int result = 0;
p = strtok_r(a_version, ".", &a_ptr);
q = strtok_r(b_version, ".", &b_ptr);
while(p != NULL && q != NULL) {
if((int)strtoul(p, NULL, 10) > (int)strtoul(q, NULL, 10)) {
result = 1;
break;
} else if((int)strtoul(p, NULL, 10) < (int)strtoul(q, NULL, 10)) {
result = -1;
break;
} else {
//do nothing
}
p = strtok_r(NULL, ".", &a_ptr);
q = strtok_r(NULL, ".", &b_ptr);
}
return result; //1: a>b -1:a<b 0: a==b
請問神人們還有沒有更漂亮的寫法呢? 例如只用一個既定array之類的?
感謝指教