处理空字符串和空格时的 qsort 和 strcmp 问题

qsort and strcmp problems when dealing with empty strings and whitespace

我在让 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);

尺寸计算错误。

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 更改为某些无符号类型是灾难),使用 len > 1 是明智的。