gpt4 book ai didi

c - char** 和 char[][] 之间的区别

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

我正在尝试使用 stdlib qsort 对字符串进行排序。我创建了两个排序函数 sort1 和 sort2。 sort1 输入参数是 char**,sort2 输入参数是 char[][]。当使用 sort1 函数对字符串数组进行排序时,我的程序崩溃了。

#include "stdafx.h"
#include <stdlib.h>
#include <string.h>


int compare(const void* a, const void* b)
{
const char *ia = (const char *)a;
const char *ib = (const char *)b;
return strcmp(ia, ib);
}

//program crashes
void sort1(char **A, int n1) {

int size1 = sizeof(A[0]);
int s2 = n1;
qsort(A,s2,size1,compare);
}

//works perfectly
void sort2(char A[][10], int n1) {

int size1 = sizeof(A[0]);
int s2 = n1;
qsort(A,s2,10,compare);

}

int _tmain(int argc, _TCHAR* argv[])
{

char *names_ptr[5] = {"norma","daniel","carla","bob","adelle"};
char names[5][10] = {"norma","daniel","carla","bob","adelle"};
int size1 = sizeof(names[0]);
int s2 = (sizeof(names)/size1);
sort1(names_ptr,5); //doesnt work
sort2(names,5); //works
return 0;
}

最佳答案

qsort 函数接收一个指向正在排序的事物的指针。在 sort2 中,您正在对 10 个字符的数组进行排序。在 sort1 中,您正在对指向 char 的指针进行排序。

因此 compare 函数对于 sort1 来说是错误的,因为参数是指向 char 的指针(转换为 void * ),但您转换为指向 char 的指针

sort2 之所以有效,是因为将指向 10 个字符的数组的指针转换为指向 char 的指针(通过 void *) 生成一个指向这 10 个字符中的第一个字符的指针。

您需要对这两种情况使用不同的比较函数,因为您要对不同的事物进行排序。

关于c - char** 和 char[][] 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38709821/

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