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 :

SIGSEGV lors de l'attribution de la valeur '\0'


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 13
    Par défaut SIGSEGV lors de l'attribution de la valeur '\0'
    Bonjour les gens !
    Je travail sur un petit projet et j'ai un problème avec une de mes fonction. Cette fonction prend en argument une chaine de caractère, elle insère un marqueur de fin de chaine à la fin du premier mot rencontré et retourne un pointeur sur le mot suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    char *lire_mot(char *str, char **pmot_suiv)
    {
      int i=0;
     
      while( isspace(*(str+i)) )//permet de zapper les espaces de début
        i++;
     
     
      if(*(str+i)=='"')//type string on coupe donc après le guillemet suivant
        {
          do{
    	i++;
     
    	if(*(str+i)=='\0')
    	{
    	  *pmot_suiv=NULL;
    	  return str;
    	}
     
          }while( *(str+i)!='"' );
        }
      else
        {
          do{
    	i++;
    	if(*(str+i)=='\0')
    	  {
    	    *pmot_suiv=NULL;
    	    return str;
    	  }
          }while(!isspace( *(str+i) ));
     
        }
     
      *(str+i)='\0';//ici c'est l'horreur ! valgrind et ddd me disent que l'erreur de segmentation intervient ici
      i++;
     
       while( isspace(*(str+i)) )//si plusieurs espaces entre deux mots, les zape et pointe sur le début du mot suivant
         i++;
     
     
      *pmot_suiv=(str+i);
     
      return str;
    }
    Auriez vous une idée de l'origine de cette erreur de segmentation ???
    Merci infiniment pour toute aide que vous pourrez m'apporter, parce que la je devient dingue !

  2. #2
    Membre chevronné Avatar de Lavock
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 560
    Par défaut
    Es-tu sûr que ta chaîne possède bien un '\0' ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 13
    Par défaut
    Ben dans mon main du test je fais une déclaration
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char* string="salut les copains";
    Il y'a bien insertion automatique du \0 à la fin non ?

    Enfin de toute manière là n'est pas le problème, le problème c'est que l'espace entre salut et les, (en admettant que je lance la fonction sur le premier mot) je veux le remplacer par un \0, et ca la que ca bug et que j'ai droit à ma belle erreur de segmentation !

  4. #4
    Membre émérite
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Par défaut
    Quand tu déclares une chaîne comme ça tu n'as pas le droit de modifier sa valeur.
    Pour que tu puisses modifier sa valeur il faut la déclarer comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char string[] = "salut les copains";

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 13
    Par défaut
    merci pour l'aide !

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

Discussions similaires

  1. Attribution d'une valeur lors de la première boucle For
    Par Neoblackbird dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 15/05/2013, 07h24
  2. [PEAR][HTML_QuickForm] Attribution d'une valeur par défaut à un select
    Par mohican13 dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 24/02/2006, 08h08
  3. [XSLT]Sort sur un attribut dont la valeur est en param
    Par Trin dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 07/11/2005, 16h16
  4. Réponses: 4
    Dernier message: 12/10/2005, 13h13
  5. prob requete: compter les attributs dont la valeur=1
    Par klik dans le forum Langage SQL
    Réponses: 5
    Dernier message: 20/07/2005, 09h56

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