簡體   English   中英

字符串數組的基本qsort在qsort()中崩潰

[英]basic qsort on string array crashes in qsort()

根據gdb,我嘗試使用qsort創建一些基本代碼以對字符串數組進行排序,但是在qsort中崩潰:

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

static int pcmp(const void * a, const void * b)
{
  return strcmp(* (char * const *) a, * (char * const *) b);
}
int main()
{
  char pn[10][256];

  memset(pn, 0, sizeof(char) * 10 * 256);

  strcpy(pn[0], "hello");
  strcpy(pn[1], "TEST");
  strcpy(pn[2], "abc");
  strcpy(pn[3], "000000");

  qsort(pn, 4, sizeof (char *), pcmp);
}
static int pcmp(const void * a, const void * b)
{
  return strcmp( (const char *) a, (const char *) b);
}
int main()
{
  char pn[10][256];

  strcpy(pn[0], "hello");
  strcpy(pn[1], "TEST");
  strcpy(pn[2], "abc");
  strcpy(pn[3], "000000");

  qsort(pn, 4, sizeof (char [256]), pcmp);
  return 0;
}
qsort(pn, 4, sizeof (char *), pcmp);

您告訴qsort您要排序的是4個char*的數組,但是

char pn[10][256];

實際上, pn是10個char[256]的數組。 這些東西與布局不兼容,並且qsortchar[256]的第一個字節中的某些字節解釋為char* 這是不確定的行為,並且不太可能引起分段錯誤。

為了解決這種特殊情況,您可以將比較更改為

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

和對

qsort(pn, 4, sizeof pn[0], pcmp);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM