Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Buonasera a tutti. Stavo facendo delle prove per ordinare un array di stringhe con la funzione di libreria qsort quando sono incappato in un dilemma piuttosto curioso:
Avevo dichiarato un'array di stringhe in questo modo:
Codice sorgente - presumibilmente C/C++
char **array2 = {
"Anna",
"Mario",
"Carlo",
"Tiziano",
"Silvio",
"Bernardo",
"Matteo"
};
e quando andava a fare l'ordinamento (l'utilizzo della qsort era esatto), mi dava una bella segmentation fault.
Poi l'ho ridichiarato in questo modo:
Codice sorgente - presumibilmente C/C++
char *array2[] = {
"Anna",
"Mario",
"Carlo",
"Tiziano",
"Silvio",
"Bernardo",
"Matteo"
};
E tutto ha funzionato alla perfezione, il che mi è sembrato molto strano o_O, contando che mi hanno sempre detto che tra * e [] non c'è differenza. Allora ho provato a copiare quell'array di stringhe statico in un nuovo array di stringhe dinamico ed effettuare l'ordinamento su quest'ultimo, in questo modo:
Codice sorgente - presumibilmente C++
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int compare (constvoid*voidOne, constvoid*voidTwo);
int compare (constvoid*voidOne, constvoid*voidTwo)
{
char**one =(char**) voidOne;
char**two =(char**) voidTwo;
returnstrcmp(*one, *two);
}
E anche qui non ha fatto una piega. Quindi io mi sto chiedendo come mai dichiarandolo statico col doppio puntatore (**) non funziona, mentre allocandolo dinamicamente funziona. Questa cosa mi causa una discreta confusione mentale ._.