我正在测试比较器功能的实现。因此,这里是我的代码,工作正确执行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