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

Bibliothèque standard C Discussion :

[string] Bug strncpy


Sujet :

Bibliothèque standard C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Avatar de vincent.mbg
    Homme Profil pro
    Développeur Python
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Python

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Par défaut [string] Bug strncpy
    Bonjour,

    j'ai un bug avec la fonction strncpy.
    je cherche à récupérer le préfix de chaque mot d'une liste de mots.
    Le problème, c'est que à un moment, strncpy ne veut plus copier correctement.

    Voici un extraie de code.
    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
     
     
        for ( i = 0; i < size_of_list ; i++ ) {
            int taille_du_mot ;
            mot_a_inserer = PyString_AsString( PyList_GetItem( liste_de_mots, i ) ) ;
     
            [...]
     
            index = 1 ;
            strncpy( prefix, mot_a_inserer, index ) ;  //prefix = mot_a_inserer[ : index ]
            printf("pour etre sur que ca bug : \n") ;
            printf("mot %s copié sur %d\n", mot_a_inserer, index );
            printf("prefix %s \n", prefix ) ;
            printf("-----------------------------\n" );       
            insertion_termine = FALSE ;
    Et voici ce que ça affiche.

    pour etre sur que ca bug :
    mot art copié sur 1
    prefix a
    -----------------------------
    pour etre sur que ca bug :
    mot artiste copié sur 1
    prefix a
    -----------------------------
    pour etre sur que ca bug :
    mot article copié sur 1
    prefix artis
    -----------------------------
    Pourquoi à la dernier ligne copier "article" sur 1 me renvoie "artis" et non "a" ?

    D'avance, merci beaucoup.
    Mon guide pour apprendre Tkinter - N'oubliez pas de consulter les FAQ Python ou de visiter mon blog

  2. #2
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par vincent.mbg Voir le message
    Pourquoi à la dernier ligne copier "article" sur 1 me renvoie "artis" et non "a" ?
    Si la copie s'arrête parce que la taille est atteinte, strncpy() ne met pas le caractère de fin de chaîne '\0'. Donc si le tableau dans lequel tu copie n'est pas suffisamment grand pour contenir ce \0 ou n'est pas correctement initialisé, la chaîne n'est pas correctement terminée (et donc n'est pas une chaîne C) et ne s'affichera donc pas correctement.

  3. #3
    Membre chevronné
    Avatar de vincent.mbg
    Homme Profil pro
    Développeur Python
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Python

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Par défaut
    Merci beaucoup pour cette réponse rapide.
    Si je comprend bien j'ai juste à faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    strncpy( prefix, mot_a_inserer, index ) ;
    prefix[ index + 1 ] = '\0' ;
    Je vais tester ça demain matin là je suis un peu fatigué.
    Encore merci.
    Mon guide pour apprendre Tkinter - N'oubliez pas de consulter les FAQ Python ou de visiter mon blog

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 853
    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 853
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par vincent.mbg Voir le message
    Merci beaucoup pour cette réponse rapide.
    Si je comprend bien j'ai juste à faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    strncpy( prefix, mot_a_inserer, index ) ;
    prefix[ index + 1 ] = '\0' ;
    Presque. N'oublie pas que les tableaux sont numérotés à partir de 0 donc si tu copies "index" caractères, le \0 devra être stocké à prefix[index] et non prefix[index + 1]...
    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]

  5. #5
    Membre chevronné
    Avatar de vincent.mbg
    Homme Profil pro
    Développeur Python
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Python

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Par défaut
    C'est bon ça marche

    Merci beaucoup.
    Mon guide pour apprendre Tkinter - N'oubliez pas de consulter les FAQ Python ou de visiter mon blog

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

Discussions similaires

  1. Bug avec les strings
    Par sphere369 dans le forum Débuter
    Réponses: 5
    Dernier message: 19/02/2009, 19h59
  2. bug avec String.IndexOf()
    Par giova_fr dans le forum C#
    Réponses: 17
    Dernier message: 19/12/2007, 14h48
  3. Réponses: 3
    Dernier message: 05/01/2007, 15h50
  4. [VBA-E] Bug dans la concaténation de String
    Par krollkop dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 01/06/2006, 11h41
  5. [DEBUTANT] String et char, bug
    Par FinalSpirit dans le forum Débuter
    Réponses: 15
    Dernier message: 10/01/2006, 18h42

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