我正在測試比較器功能的實現。因此,這裏是我的代碼,工作正確執行C中的比較器功能不能按預期工作
#include <stdio.h>
#include <string.h>
int compare_names(const void* a, const void* b)
{
char* sa = (char*) a;
char* sb = (char*) b;
return strcmp(sa, sb);
}
int main()
{
char *a = "Bianca";
char *b = "Ana";
printf("Comparing %s with %s returns: %i\n", a, b, compare_names(a, b));
return 0;
}
但我不認爲這是在compare_names
功能如右圖a
和b
參數應該變成是一個字符指針的指針。作爲一本書我讀過指出,爲compare_names
功能正確的代碼將
int compare_names(const void* a, const void* b)
{
char** sa = (char**) a;
char** sb = (char**) b;
return strcmp(*sa, *sb);
}
但是,當我跑的代碼,我得到了一個分段錯誤(核心轉儲)。
我在這裏錯過了什麼?
編輯:我在Linux x64上使用gcc。
可能您書中代碼的上下文有所不同。使用不同的上下文(例如其他數據類型,其他數據關係和嵌套等),您可以(並將)獲得不同的代碼。 – glglgl
假設書中的代碼出現在qsort比較器或類似的環境中,那麼這是有道理的。在這種情況下,它應該被稱爲'compare_names(&a,&b)'。 –
@glglgl這就是我的想法。 – kaneda