在C中使用qsort()后,是否会遇到奇怪的字符
我正在学习使用C的qsort()对字符数组进行排序,在C中使用qsort()后,是否会遇到奇怪的字符,c,arrays,string,sorting,C,Arrays,String,Sorting,我正在学习使用C的qsort()对字符数组进行排序,chars[]=“atlantic”。返回qsort()后,我打印出我的s,但只得到了不可读的字符。我认为我的compare()是正确的,因为qsort()需要的只是使用它来确定*a是否在*b之前/之后。是否有人知道是什么原因导致该行printf(“之后:%s\n”,s)不工作?谢谢 int compare(const void * a, const void * b){ return *(char*)a - *(char*)b; } vo
chars[]=“atlantic”
。返回qsort()后,我打印出我的s
,但只得到了不可读的字符。我认为我的compare()是正确的,因为qsort()需要的只是使用它来确定*a是否在*b之前/之后。是否有人知道是什么原因导致该行printf(“之后:%s\n”,s)代码>不工作?谢谢
int compare(const void * a, const void * b){
return *(char*)a - *(char*)b;
}
void doWork(char* s) {
printf("Before: %s\n", s);
qsort(s, strlen(s), sizeof(char *), compare);
printf("After: %s\n", s);
}
您似乎在告诉qsort
此处您正在排序的类型是char*
而不是char
。除非指针的大小与字符的大小完全相同,否则不会有好结果:-)
您应该使用:
qsort(s, strlen(s), sizeof(char), compare);
或者,由于sizeof(char)
始终是1
,因此您可以通过以下操作:
qsort(s, strlen(s), 1, compare);
尽管为了尽量减少将来需要更改类型时的代码更改,您可以直接使用变量而不是类型:
qsort(s, strlen(s), sizeof(*s), compare);
如果有任何更改:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int compare(const void * a, const void * b){
return *(char*)a - *(char*)b;
}
void doWork(char* s) {
printf("Before: %s\n", s);
qsort(s, strlen(s), sizeof(*s), compare);
printf("After: %s\n", s);
}
int main (void) {
char s[] = "atlantic";
doWork(s);
return 0;
}
您似乎在告诉qsort
此处您正在排序的类型是char*
而不是char
。除非指针的大小与字符的大小完全相同,否则不会有好结果:-)
您应该使用:
qsort(s, strlen(s), sizeof(char), compare);
或者,由于sizeof(char)
始终是1
,因此您可以通过以下操作:
qsort(s, strlen(s), 1, compare);
尽管为了尽量减少将来需要更改类型时的代码更改,您可以直接使用变量而不是类型:
qsort(s, strlen(s), sizeof(*s), compare);
如果有任何更改:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int compare(const void * a, const void * b){
return *(char*)a - *(char*)b;
}
void doWork(char* s) {
printf("Before: %s\n", s);
qsort(s, strlen(s), sizeof(*s), compare);
printf("After: %s\n", s);
}
int main (void) {
char s[] = "atlantic";
doWork(s);
return 0;
}
问题是您正在将sizeof(char*)
传递到qsort
中,其中sizeof(char)
是合适的
使用
问题是您正在将sizeof(char*)
传递到qsort
中,其中sizeof(char)
是合适的
使用
s
的元素不是类型char*
,因此它们没有sizeof(char*)
,而是使用sizeof(char)
qsort(s, strlen(s), sizeof(char), compare);
s
的元素不是类型char*
,因此它们没有sizeof(char*)
,而是使用sizeof(char)
qsort(s, strlen(s), sizeof(char), compare);
sizeof*s
将是另一个选项,如果该代码以后适应wchar\u t
strings,则可能有用sizeof*s
将是另一个选项,如果该代码以后适应wchar\u t
字符串,则可能有用