gpt4 book ai didi

在 C 中使用 qsort() 后对获得奇怪的字符感到困惑

转载 作者:太空宇宙 更新时间:2023-11-04 00:29:25 24 4
gpt4 key购买 nike

我正在学习使用 C 语言的 qsort() 对字符数组进行排序,char s[]="atlantic"。返回 qsort() 后,我打印出我的 s,但我只得到了不可读的字符。我认为我的 compare() 是正确的,因为所有 qsort() 需要用它来找出 *a 是否在 *b 之前/等于/之后。有谁知道是什么原因导致行 printf("After: %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(s, strlen(s), sizeof(char *), compare);

您似乎在这里告诉 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;
}

您将看到您正在寻找的输出:

Before: atlantic
After: aacilntt

关于在 C 中使用 qsort() 后对获得奇怪的字符感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33205359/

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