我正在使用一個函數,該函數具有在qsort
中用於比較以升序或取消順序排序的變量字段的段(如下所示)。我在NormalizeResClass
函數中對氣體和油井分類進行了排序,並添加了第三個訂單(斷言爲0,下降爲1,第三個訂單爲2),該函數爲分類返回不同的int
。c中的指針表達有什麼問題?
我添加了如下所示的(typsort == 2)
的代碼,但只有在將保留類作爲唯一排序類型時才能正確排序。如果我按保留級別和名稱的順序排序,它就不會排序。
else
塊中的原始代碼在xval和yval之前使用*((int *)
,我在指針上很弱。我知道它是投射到int,但NormalizeResClass
函數已經返回一個int,所以我不需要投射,如果我使用它,我得到一個segmentaion故障。
static char *Strings = NULL; // Global var
int result= 0; // local var
int ft; // local var
// ft is checked before going to this to be >= 0
if (typsort == 2)
{
// the code that I have added
result = strncmp (Strings + NormalizeResClass (xval),
Strings + NormalizeResClass (yval), ft);
}
else
{
// this code was there and the sorting was right
result = strncmp (Strings + *((int *) xval),
Strings + *((int *) yval), ft);
}
這是正常化功能如下我可能需要確保所有這些都有一個唯一的編號 幾個具有相同。
int NormalizeResClass (char rc)
{
/
Given a reserve class string , return a reserve class number.
*/register int i;
register char *p, *q;static struct
{
int index;
char str;
} RCposs[] =
{
{
1, "PROVED DEVELOPED PRODUCING"},
{
2, "PROVED PRODUCING SECONDARY"},
{
3, "PROVED PRODUCING TERTIARY"},
{
1, "PROVED PRODUCING"},
{
4, "PROVED SHUT-IN"},
{
5, "PROVED DEVELOPED NON-PRODUCING"},
{
5, "PROVED NON-PRODUCING"},
{
6, "PROVED DEVELOPED BEHIND-PIPE"},
{
6, "PROVED BEHIND-PIPE"},
{
8, "PROVED UNDEVELOPED SECONDARY"},
{
9, "PROVED UNDEVELOPED TERTIARY"},
{
7, "PROVED UNDEVELOPED"},
{
1, "PROVED"},
{
10, "PROBABLE DEVELOPED PRODUCING"},
{
11, "PROBABLE PRODUCING SECONDARY"},
{
12, "PROBABLE PRODUCING TERTIARY"},
{
13, "PROBABLE SHUT-IN"},
{
10, "PROBABLE PRODUCING"},
{
14, "PROBABLE DEVELOPED NON-PRODUCING"},
{
14, "PROBABLE NON-PRODUCING"},
{
15, "PROBABLE DEVELOPED BEHIND-PIPE"},
{
15, "PROBABLE BEHIND-PIPE"},
{
17, "PROBABLE UNDEVELOPED SECONDARY"},
{
18, "PROBABLE UNDEVELOPED TERTIARY"},
{
16, "PROBABLE UNDEVELOPED"},
{
20, "PROBABLE PRIMARY/SECONDARY"},
{
21, "PROBABLE SECONDARY"},
{
19, "PROBABLE"},
{
22, "POSSIBLE DEVELOPED PRODUCING"},
{
23, "POSSIBLE PRODUCING SECONDARY"},
{
24, "POSSIBLE PRODUCING TERTIARY"},
{
25, "POSSIBLE SHUT-IN"},
{
22, "POSSIBLE PRODUCING"},
{
26, "POSSIBLE DEVELOPED NON-PRODUCING"},
{
26, "POSSIBLE NON-PRODUCING"},
{
27, "POSSIBLE DEVELOPED BEHIND-PIPE"},
{
27, "POSSIBLE BEHIND-PIPE"},
{
29, "POSSIBLE UNDEVELOPED SECONDARY"},
{
30, "POSSIBLE UNDEVELOPED TERTIARY"},
{
28, "POSSIBLE UNDEVELOPED"},
{
22, "POSSIBLE"},
{
32, "PROSPECTIVE PRIMARY/SECONDARY"},
{
33, "PROSPECTIVE SECONDARY"},
{
31, "PROSPECTIVE"},
{
34, "ANALOGY"},
{
35, "DEPLETE"},
{
36, "PROV+PROB+POSS UNDEVELOPED RESERVES"},
{
37, "PROV+PROB+POSS DEVELOPED RESERVES"},
{
38, "PROV+POSS UNDEVELOPED RESERVES"},
{
39, "PROV+POSS DEVELOPED RESERVES"},
{
40, "PROB+POSS UNDEVELOPED RESERVES"},
{
41, "PROB+POSS DEVELOPED RESERVES"},
{
42, "PROV+PROB UNDEVELOPED RESERVES"},
{
43, "PROV+PROB DEVELOPED RESERVES"},
{
44, "RISKED PROV UNDEVELOPED RESERVES"},
{
45, "RISKED PROB UNDEVELOPED RESERVES"},
{
46, "RISKED POSS UNDEVELOPED RESERVES"},
{
47, "RISKED PROV BEHIND-PIPE RESERVES"},
{
48, "RISKED PROB BEHIND-PIPE RESERVES"},
{
49, "RISKED POSS BEHIND-PIPE RESERVES"},
{
50, "PLANT PRODUCTS SALES"},
{
51, "PROBABLE PLANT PRODUCTS SALES"},
{
52, "POSSIBLE PLANT PRODUCTS SALES"},
{
53, "POTENTIAL PLANT PRODUCTS SALES"},
{
54, "PROVED GAS PIPELINE SALES"},
{
55, "PROBABLE GAS PIPELINE SALES"},
{
56, "POSSIBLE GAS PIPELINE SALES"},
{
57, "POTENTIAL GAS PIPELINE SALES"},
{
58, "PROVED OIL PIPELINE SALES"},
{
59, "PROBABLE OIL PIPELINE SALES"},
{
60, "POSSIBLE OIL PIPELINE SALES"},
{
61, "POTENTIAL OIL PIPELINE SALES"},
{
0, NULL / terminator */ }};for (i = 0; (q = RCposs[i].str); i++) { p = rc; while (*p++ == *q++) { if ((*q == '\0')) return RCposs[i].index; } } return (0);
}
你的問題是什麼?怎麼了? – EboMike 2011-02-25 18:56:22
另外:'NormalizeResClass'函數做了什麼?它有副作用嗎? – 2011-02-25 19:12:09