我遇到问题让qsort为字符串数组工作(确切地说是char *)。我创建了一个比较函数,我认为它应该适用于qsort要求,但它似乎根本不起作用。我还需要它来处理空白字符和空白字符串(例如"")。任何关于我做错事的方向或说明都将不胜感激。
我的相关源代码:
int compareAlphabetically(const void * a,const void * b);
void sortStringArray(char * * arrString, int len){
int size = sizeof(arrString) / sizeof(char *);
if(*arrString != NULL && len > 1)
qsort(arrString, size, sizeof(char *), compareAlphabetically);
}
int compareAlphabetically(const void * a, const void * b)
{
const char *a_p = *(const char **) a;
const char *b_p = *(const char **) b;
return strcmp(a_p,b_p);
}
函数定义是(它应保持不变):
/**
* Takes an array of C-strings, and sorts them alphabetically, ascending.
*
* arrString: an array of strings
* len: length of the array 'arrString'
*
* For example,
* int len;
* char * * strArr = explode("lady beatle brew", " ", &len);
* sortStringArray(strArr, len);
* char * str = implode(strArr, len, " ");
* printf("%s\n", str); // beatle brew lady
*
* Hint: use the <stdlib.h> function "qsort"
* Hint: you must _clearly_ understand the typecasts.
*/
void sortStringArray(char * * arrString, int len);
答案 0 :(得分:3)
错误的尺寸计算。
size = sizeof(arrString) / sizeof(char *);
可能总是1:
指针(char **
)的大小除以指针(char *
)的大小。
代码可能需要使用len
:
void sortStringArray(char * * arrString, int len){
if(*arrString != NULL && len > 1) {
// qsort(arrString, size, sizeof(char *), compareAlphabetically);
qsort(arrString, len, sizeof(char *), compareAlphabetically);
}
}
[编辑]
注意:功能上不需要 len > 1
。
对于值0,不需要len > 1
。但由于len
可能小于0且size_t
是某些无符号类型(并且将负int
更改为某些无符号tpye是disater),因此使用len > 1
是谨慎的。< / p>