我从中获得了比较部分的代码片段。我正在研究如何在我的程序中实现比较功能。
#include<stdio.h>
#include<string.h>
int compare(const void* a,const void* b)
{
char** sa=(char**)a;
char** sb=(char**)b;
return strcmp(*sa,*sb);
}
int main(){
int l=compare("helloworld","hello");
printf("%d",l);
return 0;
}
但我得到了分段错误。我是c中指针的新手。我应该做什么修改,以便从这个程序中得到l的值。
答案 0 :(得分:1)
除了调用库函数compare
之外,您在strcmp
方法中没有做任何有用的事情。只需将其替换为以下内容:
int compare(const char* a,const char* b)
{
return strcmp(a,b);
}
但是,如果您仍想将char *指向来回转换为void *,可以通过以下方式进行:
int compare(const void* a,const void* b)
{
char** sa=(char**)&a;
char** sb=(char**)&b;
return strcmp(*sa,*sb);
}
答案 1 :(得分:0)
您将字符串“hello”取消引用为地址,这些地址无效。 sa和sb指向指向字符的指针,但a和b只是指针(恰好是指向字符的指针。)你可以使用:
char** sa=(char**)&a;
char** sb=(char**)&b;
这意味着将sa和sb设置为指针a和b的地址(恰好是指向字符的指针,以及指向字符指针的指针)或:
int compare(const void** a,const void** b)
char** sa=(char**)a;
char** sb=(char**)b;
...
int l=compare(&"helloworld",&"hello");
表示将指针的地址传递给“hello”的第一个字节(指向指针的指针)
或大多数人会这样做的方式:
#include<stdio.h>
#include<string.h>
int compare(const void* a,const void* b)
{
char* sa=(char *)a;
char* sb=(char *)b;
return strcmp(sa,sb);
}
int main(){
int l=compare("helloworld","hello");
printf("%d",l);
return 0;
}
除非有一些理由说明为什么你需要sa和某人指向指向字符的指针,当然。