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 taille de buffer


Sujet :

C

  1. #21
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Citation Envoyé par koktel_dfr
    J'utilise GCC sous Windows par l'intermédiaire de Cygwin
    Si j'ai bonne mémoire, cygwin émule (ou quelque chose dans le genre) Linux. Je pense que les librairies fournies utilisent donc le format UNIX pour les fins de ligne. D'où le problème. Peut-être vaut-il mieux utiliser gcc mingw?

  2. #22
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Par défaut
    Citation Envoyé par stephl
    Si j'ai bonne mémoire, cygwin émule (ou quelque chose dans le genre) Linux. Je pense que les librairies fournies utilisent donc le format UNIX pour les fins de ligne. D'où le problème. Peut-être vaut-il mieux utiliser gcc mingw?
    Le truc c'est que je voudrais que mon code sois portable sous UNIX, c'est justement pour ca que j'utilise GCC sous windows. Enfin, au pire si il n'y a qu'un caractere de fin de ligne a changer ce n'est pas bien grave.

  3. #23
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par koktel_dfr
    Le truc c'est que je voudrais que mon code sois portable sous UNIX, c'est justement pour ca que j'utilise GCC sous windows. Enfin, au pire si il n'y a qu'un caractere de fin de ligne a changer ce n'est pas bien grave.
    ben si tu laisses le \r ça sera portable....

    Pour mémoire, le \r ramène le curseur en début de ligne. Vu que le \n fait normalement CR et LF, ça ne changera rien..


  4. #24
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Sur les implémentations Windows des bibliothèques, "\n" est traduit en CR+LF lors d'une écriture de fichier, et réciproquement en lecture CR+LF est traduit en "\n".
    Il n'y a pas à proprement parler de problème de portabilité là. De toute façon, seul le source sera portable. Il faudra le compiler une fois sous UNIX et une fois sous Windows. Dans le source doit figurer "\n" pour effectuer un passage à la ligne suivante. C'est au rôle de la bibliothèque d'effectuer les traductions éventuelles.

  5. #25
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par stephl
    Sur les implémentations Windows des bibliothèques, "\n" est traduit en CR+LF lors d'une écriture de fichier, et réciproquement en lecture CR+LF est traduit en "\n".
    Il n'y a pas à proprement parler de problème de portabilité là. De toute façon, seul le source sera portable. Il faudra le compiler une fois sous UNIX et une fois sous Windows. Dans le source doit figurer "\n" pour effectuer un passage à la ligne suivante. C'est au rôle de la bibliothèque d'effectuer les traductions éventuelles.
    non je suppose que ce qu'il voulait dire c'est pour que le fichier résultant soit portable (et éventiellement le prgramme, mais comme tu dis faudra le recompiler)

  6. #26
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Citation Envoyé par souviron34
    non je suppose que ce qu'il voulait dire c'est pour que le fichier résultant soit portable (et éventiellement le prgramme, mais comme tu dis faudra le recompiler)
    Le message disait:
    je voudrais que mon code sois portable sous UNIX
    Mais s'il s'agit de la portabilité du fichier résultant, je suis d'accord avec vous: le problème se posera et il faudra faire un choix.

  7. #27
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Par défaut
    Citation Envoyé par souviron34
    non je suppose que ce qu'il voulait dire c'est pour que le fichier résultant soit portable (et éventiellement le prgramme, mais comme tu dis faudra le recompiler)
    Effectivement je souhaiterais que les deux soient portable, maitenant un fichier texte est un fichier texte, peut importe qu'il soit sous windows ou unix. Enfin, quoique c'est ce que je pensais...mais a mon avis c'est plus un problème de bloc notes car comme je l'ai dit plus haut mon fichier texte se lit sans problème sous context même sans le \r.

    Je sais bien qu'il faudra le recompiler mais au moins je n'aurais pas à écrire deux fois le programme, une fois sous windows et une fois sous unix.

  8. #28
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Portable ou non, il faudra recompiler de toute façon...

    Et sous UNIX, écrire \r\n donnera des fichiers qui ne seront pas correctement affichés par les éditeurs de texte les plus basiques d'unix (vi affichera ^M à la fin de chaque ligne). Par contre, ils seront correctement affichés par le bloc-note.

    Donc, le gcc à utiliser sous Windows n'est pas celui de Gygwin, mais MinGW.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #29
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par souviron34
    non je suppose que ce qu'il voulait dire c'est pour que le fichier résultant soit portable (et éventiellement le prgramme, mais comme tu dis faudra le recompiler)
    En ce qui concerne la portabilité du fichier, le mieux est à mon avis de passer par un utilitaire tel que dos2unix/unix2dos ou quelque chose du genre qui s'occupe de la convertion des fichiers. C'est ce que je fais, et je laisse ensuite le runtime du C gérer la lecture et l'écriture des caractères de fin de ligne de manière transparente.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  10. #30
    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 koktel_dfr
    Voici le code concernant l'écriture des lignes de mon log :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    FILE *f_out;
    char logLine[200];
     
    sprintf(logLine,"[ERROR] %s ---> %s - %s\n",functionName, errorDescription,error);
     
    f_out = fopen(logFile,"a");
    fputs(logLine, f_out);
    fclose(f_out);
    Je trouve plutot dommage de devoir déclarer un buffer de taille 200 sachant que ma ligne de log peut ne pas dépasser les 50... aurait-il un moyen de gérer ca dynamiquement. Déterminer la taille de la ligne est facile avec strlen(), mais que mettre au niveau de la déclaration de logLine ?

    Merci.
    Sans revenir sur les remarques pertinentes et les corrections qu'ont deja fournit d'autre posteurs, quel est l'interet de la chaine temporaire ? Si tu ne l'utilises pas en dehors de cet extrait, le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    FILE *f_out;
    f_out = fopen(logFile,"a");
    if(f_out != NULL)
    {
       fprintf(f_out, "[ERROR] %s ---> %s - %s\n", functionName, errorDescription,error);
       fclose(f_out);
    }
    est bien plus simple.

  11. #31
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    +10

    On est vraiment c.ns de pas y avoir pensé plus tôt

    MAis bon, on regardait pas ça.. Mais quand même..

    Bravo

Discussions similaires

  1. Taille de buffer dépassé pour DBMS_LOB
    Par Loizo dans le forum PL/SQL
    Réponses: 10
    Dernier message: 09/02/2009, 17h34
  2. [Sockets] Rendre la taille du buffer infinie ?
    Par Danny Blue dans le forum C#
    Réponses: 2
    Dernier message: 05/07/2008, 19h25
  3. augmentation de la taille du buffer MS SQL Server 2000
    Par lachgar_omar dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 06/12/2007, 21h29
  4. [TCP] Taille de buffer, et fonction send()
    Par phraides dans le forum Développement
    Réponses: 4
    Dernier message: 03/06/2007, 14h45
  5. Réponses: 39
    Dernier message: 27/03/2007, 20h25

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