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 :

Problème lors de l'extraction d'une sous-chaîne


Sujet :

C

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Luxembourg

    Informations forums :
    Inscription : Mai 2007
    Messages : 149
    Points : 145
    Points
    145
    Par défaut Problème lors de l'extraction d'une sous-chaîne
    Bonjour.

    J'ai un léger problème de C...

    Dans une fonction, je veux découper une chaine de caractères en sous-chaînes de TAILLE_MESSAGE octets. Mais là où il y a un léger problème, c'est que ca me modifie complètement le message alors que je n'y touche pas (enfin il me semble )

    Avec le code suivant...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    printf("\n\nLe message avant est : %s",*message);	
     
    strncpy(buffer, (*message)+aPartirDe, (TAILLE_MESSAGE-1));
    buffer[TAILLE_MESSAGE] = '\0';
     
    printf("\n\nLe message apres est : %s",*message)
    L'affichage me donne ceci :

    Le message avant est : Le projet Ubuntu se construit dans le cadre de la philosophie Ubuntu : le logiciel devrait être gratuit, les applications devraient être disponibles dans la langue maternelle des utilisateurs, et ces derniers devraient avoir la possibilité de modifier et de personnaliser leurs logiciels comme ils le souhaitent.

    Le message apres est : Le projet UbuntuLe projet UbuntuLe projet UbuntuLe projet UbuntuLe projet UbuntuLe projet UbuntuLe projet UbuntuLe projet UbuntuLe projet

    Il est où le problème ? C'est à cause du strncpy ?

    Merci d'avance.

  2. #2
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Montre le code qui définit buffer et *message .
    Quel est la valeur de TAILLE_MESSAGE ?
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Luxembourg

    Informations forums :
    Inscription : Mai 2007
    Messages : 149
    Points : 145
    Points
    145
    Par défaut
    Donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define TAILLE_MESSAGE 	123
    La signature de la fonction où ce bout de code se trouve est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void decoupage(int aPartirDe, char** message, char* buffer)
    Sachant que cette fonction est appelée dans une autre fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int encoreDesTrucsAEnvoyer(char* message, char* buffer, int i) {
    ...
    	int aPartirDe = (i*TAILLE_MESSAGE);
    ...
    	decoupage(aPartirDe, &message, buffer);
    }
    Et sinon, dans le main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    char* buffer;
    char* messageAEnvoyer;
    int i = 0;
    ...
    buffer = (char*)malloc(0);
    messageAEnvoyer = (char*)malloc(0);
     
    ---
    while(...){
    encoreDesTrucsAEnvoyer(messageAEnvoyer, buffer, i);
    i++;
    }

  4. #4
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    char* buffer;
    char* messageAEnvoyer;
    int i = 0;
    ...
    buffer = (char*)malloc(0);
    messageAEnvoyer = (char*)malloc(0);
    0, ça ne fait pas beaucoup!

    La norme n1124 dit :
    7.20.3 Memory management functions
    1 The order and contiguity of storage allocated by successive calls to the calloc,
    malloc, and realloc functions is unspecified.
    ... If the size of the space requested is zero, the behavior is implementation defined:
    either a null pointer is returned, or the behavior is as if the size were some
    nonzero value, except that the returned pointer shall not be used to access an object.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Luxembourg

    Informations forums :
    Inscription : Mai 2007
    Messages : 149
    Points : 145
    Points
    145
    Par défaut
    Citation Envoyé par diogene Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    char* buffer;
    char* messageAEnvoyer;
    int i = 0;
    ...
    buffer = (char*)malloc(0);
    messageAEnvoyer = (char*)malloc(0);
    0, ça ne fait pas beaucoup!
    Effectivement, le problème venait de là. Je te remercie infiniment Diogene ! Tu es un boss

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

Discussions similaires

  1. [Vxi3] Problème lors de l'extraction du mois d'une invite
    Par jod13 dans le forum Webi
    Réponses: 2
    Dernier message: 21/02/2012, 15h17
  2. Réponses: 2
    Dernier message: 16/02/2012, 11h03
  3. Extraction d'une sous-chaîne avec une regexp
    Par pc.bertineau dans le forum Langage
    Réponses: 3
    Dernier message: 25/05/2010, 16h38
  4. Shell : Extraction d'une sous chaîne
    Par 64XAVIER64 dans le forum Linux
    Réponses: 3
    Dernier message: 14/05/2009, 19h38
  5. Extraction d'une sous-chaîne
    Par jp.kerloch dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 29/06/2008, 16h56

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