Bus Error (fonction d'inversement de string)
Hyllis
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
J'essaie actuellement de refaire la fonction strrev, transformant par exemple "Salut" en "tulaS", cependant, avec tous les essaies que j'ai écris (même des versions copié/collé d'Internet pour tester, supposés fonctionner), je me heurte à un mur lors : Bus Error.
Mon code actuel:
Et je l'exécute avec
Je ne comprends pas d'où peut venir l'erreur (j'ai cru voir que c'était psq. j'écrivais sur un pointeur, mais, ça me paraît par cohérent ; et je ne vois pas comment faire autrement) et j'ai l'impression que Bus Error n'a l'air d'arriver que, ou presque, sur Mac OS (d'après mes lectures).
Auriez-vous une idée, s'il vous plait, de la provenance de cette erreur? merci d'avance.
Bonne journée :).
J'essaie actuellement de refaire la fonction strrev, transformant par exemple "Salut" en "tulaS", cependant, avec tous les essaies que j'ai écris (même des versions copié/collé d'Internet pour tester, supposés fonctionner), je me heurte à un mur lors : Bus Error.
Mon code actuel:
static int strlenx(char *str)
{
int len = 0;
while (str[len] != '\0')
++len;
return (len);
}
char *strrevx(char *str)
{
char tmp;
int len;
int mid;
int i = -1;
if (!str)
return (str);
len = strlenx(str);
mid = (len - (len % 2) / 2);
while (++i < mid)
{
tmp = *(str + i);
*(str + i) = *(str + len - i - 1);
*(str + len - i - 1) = tmp;
++i;
}
return (str);
}
Et je l'exécute avec
strrevx("Salut");.
Je ne comprends pas d'où peut venir l'erreur (j'ai cru voir que c'était psq. j'écrivais sur un pointeur, mais, ça me paraît par cohérent ; et je ne vois pas comment faire autrement) et j'ai l'impression que Bus Error n'a l'air d'arriver que, ou presque, sur Mac OS (d'après mes lectures).
Auriez-vous une idée, s'il vous plait, de la provenance de cette erreur? merci d'avance.
Bonne journée :).
A voir également:
- Bus error c
- Sms bus paris - Guide
- Fan error lenovo - Forum Refroidissement
- Cmos checksum error ✓ - Forum Carte-mère/mémoire
- Controleur de bus usb - Télécharger - Pilotes & Matériel
- Playback error reconnect in 3s (1/5) francais - Forum Box et Streaming vidéo
3 réponses
"Salut" est un pointeur sur une zone en lecture seule.
Tu n'as donc pas le droit de modifier cette zone.
Deux façons, ta fonction strrevx renvoie une nouvelle chaîne ou alors, tu crées un tableau (ou pointeur sur une zone du heap).
Par exemple, essaie pour appeler la fonction :
Cdlt,
Tu n'as donc pas le droit de modifier cette zone.
Deux façons, ta fonction strrevx renvoie une nouvelle chaîne ou alors, tu crées un tableau (ou pointeur sur une zone du heap).
Par exemple, essaie pour appeler la fonction :
char ch[]="Salut"; printf("strrevx(%s) = %s\n",ch, strrevx(ch));
Cdlt,