以下にデカール化された 2 次元配列があるとします。
char * Arr[4] =
{
{"124 -346 DATA...."},
{"39479 -32 MOREDATA...."},
{"12 -1 DATA2...."},
{"100 -45 DATA4...."}
};
qsort()を使用してSECONDフィールドに従ってこの関数をソートしようとしています。つまり、文字列は秒の最小値 (-1、-32、-45、-346) に従って並べ替えられます。各値が 1 桁のみの場合にこの関数を作成する方法は知っていますが、プログラム内の桁は任意に長くなる可能性があります。ここに私が持っているものがありますが、プログラムがクラッシュします。このデータをソートするより効率的な方法があれば、ここに置きたいと思います(私の方法はあまり効率的ではないことはわかっています)。
ソート関数 (qsort() が呼び出す):
inline void GetStr(char *ix, char* Result) //call to get second number in function
{
char *spacing; //iterator to traverse
spacing = ix; //iterator = pos of ix
int LEN = 0; //length and offset
int Offset = 0;
while(*spacing != ' ') //while not at end of first num
{
Offset++; //offset is more
spacing++;
}
spacing++; //go one ahead of the space
Offset++;
while(*spacing != ' ') //while not end of second number
{
spacing++;
Offset++;
LEN++; //length of number
}
strncpy(Result, ix + (Offset - LEN),LEN);
}
int sort(const void* a, const void* b)
{
char *ia = *(char**)a;
char *ib = *(char**)b;
char * Str;
char * Str2;
GetStr(ia, Str); //getting some strange errors....... program just crashes
GetStr(ib, Str2);
printf("Str: %s Str2: %s", Str, Str2);
int n1 = atoi(Str);
int n2 = atoi(Str2);
return (n1 > n2);
}