J'ai un tableau de pointeurs à chaîne:C de type char qsort dans le tableau des pointeurs sur des chaînes
char *TAB[3] = { "dafafa", "alfkasf", "bafgr" };
Je voudrais trier caractères dans chacune de ces chaînes.
Ma fonction de comparaison:
int cmp(const void *a, const void *b)
{
return *(char *)a - *(char *)b;
}
et en essayant qsort sur un de ces:
qsort(TAB[0], 6, sizeof(char), cmp);
Le programme ne fonctionne pas. Après de nombreux efforts, j'ai constaté que la raison du problème est de livrer TAB[0]
à qsort()
.
Quelqu'un peut-il expliquer pourquoi cela ne fonctionne pas et comment résoudre ce problème?
Les chaînes littérales en C sont * en lecture seule *. Tenter de les modifier conduit à [* undefined behavior *] (https://en.wikipedia.org/wiki/Undefined_behavior). –
"Je voudrais trier les caractères dans chacune de ces chaînes." -> et où voudriez-vous mettre cette chaîne triée étant donné que l'écriture dans la chaîne source, un _string literal_, est _undefined behavior_? – chux