我想使用qsort排序單個字符串中的字符。它似乎沒有工作。這是我的代碼。qsort()函數C
int compare_function (const void* a, const void* b)
{
char f = *((char*)a);
char s = *((char*)b);
if (f > s) return 1;
if (f < s) return -1;
return 0;
}
int main(int argc, char* argv[])
{
char* str= argv[1];
/* Originally missing the +1 */
char* sorted_str = malloc((strlen(str) + 1)*sizeof(char));
memcpy(sorted_str, str, strlen(str) + 1);
qsort(sorted_str, sizeof(str)/sizeof(char), sizeof(char), compare_function);
printf("%s\n", sorted_str); // Originally str
free(sorted_str);
return 0;
}
輸出是?
。我需要做些什麼來解決這個問題?
這裏很多失誤。正如對答案的評論中指出的那樣,當爲已排序的字符串分配內存時,您不會考慮NULL終止。由於sizeof(str)/ sizeof(char)的大小是錯誤的,str是一個字符指針,所以它的大小隻是存儲指針地址的字節數。你從來沒有檢查過你是否有足夠的論據通過......你確定你通過了一個論點,它是在正確的位置? – Ben
請注意,更改代碼並不完全公平,以便有效指出其中一個問題的答案不再相關。您可以註釋已修改的代碼(正如我爲您所做的那樣),也可以保留原始代碼並添加修改後的代碼。 –
@JonathanLeffler我會記住這一點。 – Jumper