IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Bus error en c


Sujet :

C

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Bus error en c
    Bonjour,

    Je suis débutant en c et il m'arrive souvent de croiser des 'bus error' à tel point que je préfère les segfaults
    J'ai pour exercise de créer une fonction qui transforme en maj les caractères minuscule d'une chaîne.

    je n'attends pas de solution à l'exercise (plus amusant de trouver soi meme) juste une explication à l'error bus au lancement du prog.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    char	*ft_strupcase(char *str)
    {
    	while (*str != '\0')
    	{
    		if (*str <= 122 && *str >= 97)
    			*str = *str - 32; // ligne en cause du bus error  :( why ?
    		str++;
    	}
    	return (str);
    }
    merci d'avance

  2. #2
    Expert éminent
    Avatar de Pyramidev
    Homme Profil pro
    Développeur
    Inscrit en
    Avril 2016
    Messages
    1 469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 469
    Points : 6 102
    Points
    6 102
    Par défaut
    Bonjour,

    Je parie que tu essaies de modifier une chaîne non modifiable, par exemple avec un appel du genre ft_strupcase("test").
    En langage C, bien que les string litterals comme "test" ne soient pas modifiables, elles sont convertibles en pointeurs vers caractère non constant, ce qui est aberrant, mais c'est ainsi.

    « String literals are not modifiable (and in fact may be placed in read-only memory such as .rodata). If a program attempts to modify the static array formed by a string literal, the behavior is undefined. »
    Source : http://en.cppreference.com/w/c/language/string_literal

    Il faut que tu passes en argument de ta fonction un tableau de char que tu as alloué dans la pile, par exemple ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char tab[] = "test";
    ft_strupcase(tab);
    A part ça, le code de ta fonction aurait été plus clair en remplaçant 97 par 'a', 122 par 'z' et 32 par ('a' - 'A').

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Franchement un grand MERCI !

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par shvan Voir le message
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (*str <= 122 && *str >= 97)
    	*str = *str - 32;
    Bonjour

    Sais-tu que les constantes écrites sous forme "lettre" ont la même valeur numérique que leur valeur ascii et peuvent s'utiliser comme des nombres ?

    Autrement dit, 'b' - 'a' vaut 1 (et ce, dans tous les sens que permettent les équations algébriques). Ainsi, tu peux réécrire ta conversion de façon plus lisible de cette façon
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (*str >= 'a' && *str <= 'z')
    	*str = *str - ('a' - 'A');   // Ou encore mieux *str = *str - 'a' + 'A'
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. bus error bizzare
    Par markotik dans le forum C++
    Réponses: 3
    Dernier message: 20/01/2007, 19h58
  2. Probleme de valeurs fixes et bus error
    Par toto08 dans le forum C
    Réponses: 18
    Dernier message: 02/01/2007, 14h44
  3. [Débutant] Bus Error et scanf
    Par BiLLKiLL dans le forum C
    Réponses: 2
    Dernier message: 17/09/2006, 20h47
  4. bus error sur une machine SUN
    Par mhtrinh dans le forum C
    Réponses: 14
    Dernier message: 10/07/2006, 16h43
  5. bus error
    Par salseropom dans le forum C
    Réponses: 3
    Dernier message: 15/12/2005, 11h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo