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 :

Petite question sur les chaînes caractères


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de ac/dc
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2006
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 369
    Par défaut Petite question sur les chaînes caractères
    Voila, je construis dans une boucle une chaine de caractere. J'aurais aimé savoir si lors du 2eme passage des restes de la 1ere construction de la trame peuvent restées dans le buffer ou bien sprintf se charge de vider le buffer avant de réécrire dedans ? merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    char buff[256];
    for(int i = 0; i < 2; i++)
    {
        if(i == 0) sprintf(buff, " ... = %d", id1);
        else sprintf(buff, " ... = %d", id2);
    }

  2. #2
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Non ca va écraser rien ne restera.
    Ce qu'il faut faire c'est une concaténation.Pour cela strcat/strncat peut t'aider.

  3. #3
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Citation Envoyé par ac/dc
    Voila, je construis dans une boucle une chaine de caractere. J'aurais aimé savoir si lors du 2eme passage des restes de la 1ere construction de la trame peuvent restées dans le buffer ou bien sprintf se charge de vider le buffer avant de réécrire dedans ? merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    char buff[256];
    for(int i = 0; i < 2; i++)
    {
        if(i == 0) sprintf(buff, " ... = %d", id1);
        else sprintf(buff, " ... = %d", id2);
    }
    Curieuse boucle.
    Ton code est équivalent à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    char buff[256];
    sprintf(buff, " ... = %d", id1);
    sprintf(buff, " ... = %d", id2);

  4. #4
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par crocodilex
    Curieuse boucle.
    Ton code est équivalent à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    char buff[256];
    sprintf(buff, " ... = %d", id1);
    sprintf(buff, " ... = %d", id2);
    non sprintf ne fait pas de concaténation.Le deuxiéme sprintf commence à ecrire à partir de buff[0] donc tu écrases ce que tu as fais précédemment.

    A la rigueur tu pourrais faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    char buff[256];
    sprintf(buff, " ... = %d", id1);
    sprintf(buff+strlen(buff), " ... = %d", id2);

  5. #5
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Citation Envoyé par hegros
    non sprintf ne fait pas de concaténation.Le deuxiéme sprintf commence à ecrire à partir de buff[0] donc tu écrases ce que tu as fais précédemment.
    Merci pour l'explication, meme si je sais comment fonctionne sprintf.
    Je voulais juste démontrer au P.O que sa boucle était équivalente à ce que j'ai précédemment posté.

  6. #6
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Ah désolé effectivement en relisant ton message c'est clair

  7. #7
    Membre éclairé Avatar de ac/dc
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2006
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 369
    Par défaut
    oui c'est vrai que ma boucle ne sert a rien dans ce cas mais j'ai pas mis la suite du code dans la boucle, j'ai fais une boucle car pour les 2 sprintf, le suite du code reste le meme, donc ça m'evite de réecrir 2 fois le meme code . En fait j'ai peut etre mal pose ma question, par exemple lors du 1er sprintf, buff[200] = 'c', et lors du 2eme sprintf ma chaine a ecrire dans buff ne va pas jusqu'a 200... alors buff[200] vaut toujours 'c' ou bien il est vidé ?

  8. #8
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par hegros
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    char buff[256];
    sprintf(buff, " ... = %d", id1);
    sprintf(buff+strlen(buff), " ... = %d", id2);
    Horrible !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       char buff[256];
       int n = sprintf (buff, " ... = %d", id1);
       sprintf (buff + n, " ... = %d", id2);

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

Discussions similaires

  1. Petite question sur les conventions de nommage en Java
    Par implosion dans le forum Langage
    Réponses: 7
    Dernier message: 18/01/2006, 15h54
  2. Petites question sur les onglets...
    Par jarod_bx dans le forum Access
    Réponses: 1
    Dernier message: 20/12/2005, 18h45
  3. [ATL] Petite question sur les progress bar
    Par MrMaze dans le forum MFC
    Réponses: 1
    Dernier message: 06/05/2005, 09h40
  4. Réponses: 3
    Dernier message: 08/12/2004, 13h58
  5. Petite question sur les performances de Postgres ...
    Par cb44 dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 13/01/2004, 13h49

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