我正在测试比较器功能的实现。所以这是我的代码
#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;
}
但我认为这是不对的a
,函数b
中的参数compare_names
应该是指向 char 指针的指针。正如我读过的一本书所指出的那样,该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。