c - Qsort 不排序 char * 数组

标签 c arrays char qsort

我遇到了一个问题,即 qsort 有时会对东西进行排序,有时却不会。这是我的代码

#include <stdlib.h>
#include <stdio.h>
#include <string.h>


static int compare (const void * a, const void * b)
{
  return strcmp (*(const char **) a, *(const char **) b);
}

int main (){
  int ile = 0;
  scanf("%d", &ile);
  const char * slowa[ile];
  for(int j = 0; j <= ile; j++){
    char string[30];
    gets(string); 
    char * toAdd = strdup(string);
    slowa[j] = toAdd;
  }
  qsort (slowa, ile, sizeof (const char *), compare);

  for (int i = 0; i <= ile; i++) {
      printf ("%s\n",slowa[i]);
  }
  return 0;
}

它适用于示例 { ccc,bbb,aaa } 但不适用于示例 { afdg ,sspade , trekk, bbre, lol}

最佳答案

scanf 在输入缓冲区中留下了一个换行符,由第一个 gets 读取。

这两个循环迭代次数过多,超出了数组的范围。我猜你这样做是为了获得正确数量的表观输入。

所以在第一个循环之前清除输入,也许用一个虚拟字符串读取,并更正循环控制。

另请注意,gets() 现在已过时。

关于c - Qsort 不排序 char * 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40971849/

相关文章:

c++ - 字符值 = 'abcd'。使用多字符 char

c - 如何清空 GLib 树?

c - 这些 C 外部定义之间有什么区别?

ios - 如何在给定第二个数组的情况下找到某个值的位置?

iphone - 在 Objective C 中实例化 C 数组 - 崩溃错误 - 已释放对象的校验和不正确

c - 使用先前分配的指针调用 strlen 时出现段错误

c - 嵌套 union 和结构程序不起作用

c - 如何在 C 中读取多项式并将其存储在数组中并进行错误检查?

java - (Java) 打印出 application.class@xxxxxxx 的数组元素

C++ 原生类型 char 可以保存文件结尾字符吗?