[C] - Erreur de segmentation

Résolu/Fermé
racou56 Messages postés 5 Date d'inscription samedi 17 décembre 2011 Statut Membre Dernière intervention 17 décembre 2011 - 17 déc. 2011 à 15:00
racou56 Messages postés 5 Date d'inscription samedi 17 décembre 2011 Statut Membre Dernière intervention 17 décembre 2011 - 17 déc. 2011 à 23:04
Bonjour,

J'aurais besoin de votre aide pour le tuto sur le C du SDZ.
Je suis au chapitre 13 sur les chaînes de caractères, au moment ou l'on fait une sorte de fonction strlen.

J 'ai fait le code et lors de la compilation à la ligne du while (l.27) cette erreur apparaît :
attention : constante caractère multi-caractères [-Wmultichar]
Et lorsque je relance une deuxième compilation sans rien changer la console s'ouvre et écrit : Segmentation fault.

Voici le code :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int lngChaine(const char* chaine);

int main(int argc, char *argv[])
{
char chaine[] = "Salut";
int longueur = 0;

longueur = lngChaine(chaine);
printf("La chaine \"%s\" fait %d caractères de long", chaine, longueur);

return 0;
}

int lngChaine(const char* chaine)
{
int nbrCara = 0;
char caraActuel = 0;

do
{
caraActuel = chaine[nbrCara];
nbrCara++;
}while(caraActuel != '/0');

return nbrCara--;
}

En espérant trouver une réponse au problème.

Cordialement.

4 réponses

loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
17 déc. 2011 à 15:11
Remplace
  printf("La chaine \"%s\" fait %d caractères de long", chaine, longueur);
par
  printf("La chaine \"%s\" fait %d caracteres de long", chaine, longueur);
Et tout ira mieux.
Bonne continuation?
0
racou56 Messages postés 5 Date d'inscription samedi 17 décembre 2011 Statut Membre Dernière intervention 17 décembre 2011
17 déc. 2011 à 15:18
Remplace

  printf("La chaine \"%s\" fait %d caractères de long", chaine, longueur);

par

  printf("La chaine \"%s\" fait %d caracteres de long", chaine, longueur);


Le problème n'est pas là, je suis sous linux (oublié de le préciser) donc les caractères spéciaux en console ca passe.
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
17 déc. 2011 à 15:27
hello
\0, pas /0
} while(caraActuel != '\0');
0
racou56 Messages postés 5 Date d'inscription samedi 17 décembre 2011 Statut Membre Dernière intervention 17 décembre 2011
17 déc. 2011 à 15:33
Merci bien dubcek, ca marche !
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
Modifié par fiddy le 17/12/2011 à 18:31
Bonjour,

En plus du \0, je rajouterai que :
return nbrCara--;
Cela est équivalent à return nbrCara; dans votre cas.
Peut-être que vous vouliez mettre : return --nbrCar; ? ou plus simplement return nbrCar - 1; (plus propre et économie d'une affectation).
Cdlt,

Google is your friend
0
racou56 Messages postés 5 Date d'inscription samedi 17 décembre 2011 Statut Membre Dernière intervention 17 décembre 2011
17 déc. 2011 à 23:04
Merci, c'est vrai qu'une fois changé sa fonctionne encore mieux.
0