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 :

sprintf et variable intermédiaire


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Par défaut sprintf et variable intermédiaire
    Bonjour,

    A t on le droit de faire ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sprintf(content, "%s%s\n\n", content, vconcat);
    Donc d'utiliser la meme variable pour stocker et passée en paramètre.
    sprintf utilise t'il une variable intermédiaire ?

    Merci

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 309
    Par défaut
    Bah là étant donné que tu manipules que des chaînes de caractères, ce que tu fais n'a aucun intérêt. Tu peux écrire ça directement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    strcat(content, vconcat);
    strcat(content, "\n\n");

  3. #3
    Membre émérite Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Par défaut
    Oui mais c'est pour schématiser que j'ai écrit ca

    soit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sprintf(content, "\"%s\";%s %i\n\n", content, &tP[i+3][13], x);
    Je n'avais jamais rencontré de problème jusque là mais voilà que tout d'un coup mon buffer se retrouve complètement souillé

  4. #4
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par |PaRa-BoL Voir le message
    Donc d'utiliser la meme variable pour stocker et passée en paramètre.
    Comportement indefini:
    Citation Envoyé par Draft ISO/IEC 9899:TC2
    The sprintf function is equivalent to fprintf, except that the output is written into an array (specified by the argument s) rather than to a stream. A null character is written at the end of the characters written; it is not counted as part of the returned value. If copying takes place between objects that overlap, the behavior is undefined.
    A ne pas faire, donc.

  5. #5
    Membre émérite Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Par défaut
    Merci

  6. #6
    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 |PaRa-BoL Voir le message
    A t on le droit de faire ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sprintf(content, "%s%s\n\n", content, vconcat);
    Donc d'utiliser la meme variable pour stocker et passée en paramètre.
    sprintf utilise t'il une variable intermédiaire ?
    Non. En C99, les paramètres de sprintf() sont qualifiés 'restrict' (aliasing interdit), ce qui permet au compilateur de tenter de détecter l'arnaque... (un test peut aussi être fait à l'exécution par l'implémentation).

    Citation Envoyé par Dinkumware
    sprintf

    int sprintf(char *restrict s, const char *restrict format, ...);

    The function generates formatted text, under the control of the format format and any additional arguments, and stores each generated character in successive locations of the array object whose first element has the address s. The function concludes by storing a null character in the next location of the array. It returns the number of characters generated -- not including the null character.

  7. #7
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Non. En C99, les paramètres de sprintf() sont qualifiés 'restrict' (aliasing interdit), ce qui permet au compilateur de tenter de détecter l'arnaque... (un test peut aussi être fait à l'exécution par l'implémentation).
    Comment veux-tu qualifier de restrict les arguments optionnels d'une fonction variadic?

  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 DaZumba Voir le message
    Comment veux-tu qualifier de restrict les arguments optionnels d'une fonction variadic?
    Oui, c'est une question...

    Il se peut effectivement que dans ce cas précis, le compilateur
    ne voie rien...

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

Discussions similaires

  1. échange nombre, sans variable intermédiaire.
    Par OlympeGeekette dans le forum C++
    Réponses: 5
    Dernier message: 23/09/2013, 04h38
  2. Réponses: 2
    Dernier message: 05/03/2012, 16h31
  3. Réponses: 2
    Dernier message: 25/07/2011, 20h48
  4. Réponses: 24
    Dernier message: 19/07/2011, 01h01
  5. sprintf et variable WORD
    Par le-makinero dans le forum MFC
    Réponses: 2
    Dernier message: 14/04/2006, 15h50

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