种类的参数 [英] sort of arguments
问题描述
我有以下代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int comp(const void *a, const void *b){
char *const *aa=a;
char *const *bb=b;
return strcmp(*aa,*bb):
}
int main(int argc,char **argv){
int i;
qsort(argv+1,argc-1,sizeof *argv,comp);
for (i=1;i<argc;i++)
printf("i: %d==> '%s'\n",i,argv[i]);
return 0;
}
但这里是错误
Error 1 error C2440: 'initializing' : cannot convert from 'const void *' to 'char *const *' c:\users\student\documents\visual studio 2008\projects\sort_argv\sort_argv\sort_argv.cpp 5 sort_argv
Error 2 error C2440: 'initializing' : cannot convert from 'const void *' to 'char *const *' c:\users\student\documents\visual studio 2008\projects\sort_argv\sort_argv\sort_argv.cpp 6 sort_argv
错误3错误C2143:语法错误:缺少';'before':'
Error 3 error C2143: syntax error : missing ';' before ':'
c:\users\student\documents\visual studio 2008\projects\sort_argv\sort_argv\sort_argv.cpp 7 sort_argv
错误4错误C2143:语法错误:缺少';'before':'
Error 4 error C2143: syntax error : missing ';' before ':'
c:\users\student\documents\visual studio 2008\projects\sort_argv\sort_argv\sort_argv.cpp 7 sort_argv
请帮助
推荐答案
c $ c> sort 而不是 qsort
。 此外,(显然不是真的。) argv
的元素不得被变异,因为它们(隐含地,对于C后向兼容性)声明 const
。因此,您需要将它们复制到其他地方:
In C++, use sort
instead of qsort
. Furthermore, the elements of (Apparently not true.)argv
must not be mutated since they are (implicitly, for C backwards compatibility) declared const
. Therefore, you need to copy them somewhere else:
#include <string>
#include <vector>
#include <algorithm> // for sort
int main(int argc, char const* argv[]) {
std::vector<std::string> args(argv, argv + argc);
std::sort(args.begin(), args.end());
}
(请注意,此解决方案使用 string
和向量
而不是C字符串和C风格的数组,这是没有必要的,但它使代码更容易和更短。)
(Notice that this solution uses string
and vector
instead of C strings and C-style arrays where possible. That’s not necessary but it makes the code much easier and shorter.)
这篇关于种类的参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!