qsort und strcpy, was is falsch deklariert?

t0xic

Grünschnabel
Funktion:
Das Programm soll das Array *namen[] alphabetisch sortieren, bevor ich das array *namen[] mit strcpy mit den strings des zweidimensionallen arrays aufgefüllt habe .

hi, hier mal ein ausschnitt aus meinem programm ich weiß das 2 fehler enthalten sind
einmal bei
Code:
for(a=0;a<*namezaehl;a++)
		strcpy(namen[a],(*liste)[0][a].name);
(wobei zuweisen mit = funktioniert, wills aber mit strcpy machen) und einmal bei der
Code:
qsort(namen,*namezaehl,sizeof(char),vergl);
und der
Code:
int vergl(const void *name1, const void *name2)
{
	return(strcmp(* (char*) name1, * (char*)name2));
}
funktion.

Hier der komplette Code, ich habe schon alles mögliche probiert und in meinen C-Buch nichts passendes gefunden warum das nicht gehen könnte.

Code:
void ausgabe_alle(int *namezaehl,struct listen (*liste)[3][100])
{
	int i,a;
	char *namen[100];  

	for(a=0;a<*namezaehl;a++)
		strcpy(namen[a],(*liste)[0][a].name);

	qsort(namen,*namezaehl,sizeof(char),vergl);

	printf("\n....Gemischte Liste......\n");

	for(i=0;i<(*namezaehl);i++)
	{
		printf("%s\n",namen[i]);
	}

	printf(".....Listenende.....");

}

int vergl(const void *name1, const void *name2)
{
	return(strcmp(* (char*) name1, * (char*)name2));
}

Wie gesagt es ist nur ein Ausschnitt die main und ein paar andere funktionen funktionieren.
 
Hier ist ziemlich viel falsch, du musst dir schon im Klaren sein, was du mit qsort denn sortieren willst.
Dein sizeof(char) ist nicht die Elementgröße, deine Vergleichsfunktion arbeitet ebenso nicht auf Elementen des Typs, nach dem du sortieren willst.
 
hab nun ein bisschen was verändert,

Code:
void ausgabe_alle(int *namezaehl,struct listen (*liste)[3][100])
{
    int i,a;
    char *namen[100];  
 
    for(a=0;a<*namezaehl;a++)
        strcpy(namen[a],(*liste)[0][a].name);
 
    qsort(namen,*namezaehl,sizeof(char*),vergl);
 
    printf("\n....Gemischte Liste......\n");
 
    for(i=0;i<(*namezaehl);i++)
    {
        printf("%s\n",namen[i]);
    }
 
    printf(".....Listenende.....");
 
}
 
int vergl(const void *name1, const void *name2)
{
    return strcmp(* (const char **) name1, * (const char **)name2);
}
 

Neue Beiträge

Zurück