gpt4 book ai didi

c++ - 关于qsort实现的问题

转载 作者:行者123 更新时间:2023-11-27 22:30:20 26 4
gpt4 key购买 nike

我已经通过编程珍珠实现了这段代码,我认为它应该是正确的,但它给了我这个错误代码:

#include <stdio.h>
#include <iostream>
#include <string.h>
using namespace std;
using std::qsort;
int charcmp(char*x,char *y){ return *x-*y;}
#define wordmax 100
int main(void){
char word[wordmax];
char sig[wordmax];
while(scanf("%s",word)!=EOF){
strcpy(sig,word);
qsort(sig,strlen(sig),sizeof(char),charcmp);
printf("%s %s\n",sig,word);
}


return 0;
}

错误:

1>------ Build started: Project: anagrams, Configuration: Debug Win32 ------
1> anagrams.cpp
1>c:\users\david\documents\visual studio 2010\projects\anagrams\anagrams.cpp(11): warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files\microsoft visual studio 10.0\vc\include\stdio.h(304) : see declaration of 'scanf'
1>c:\users\david\documents\visual studio 2010\projects\anagrams\anagrams.cpp(13): error C2664: 'qsort' : cannot convert parameter 4 from 'int (__cdecl *)(char *,char *)' to 'int (__cdecl *)(const void *,const void *)'
1> None of the functions with this name in scope match the target type
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

我认为 jon bentley 应该知道这样的话题,是的,为什么会出现这样的错误?

最佳答案

您的charcmp 函数需要使用const void* 参数:

int charcmp(const void* x, const void* y)
{
return *(const char*)x - *(const char*)y;
}

错误信息:

cannot convert parameter 4 from 'int (__cdecl *)(char *,char *)' to 'int (__cdecl *)(const void *,const void *)'

告诉您您传递的参数(指向函数 charcmp 的指针)没有传递到 qsort 的正确类型。

由于这个问题被标记为 C++,您可以考虑使用 std::sort 代替;它是类型安全的并且更容易使用:

std::sort(sig, sig + strlen(sig));

关于c++ - 关于qsort实现的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3326076/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com