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 :

Remplir un buffer char*


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 3
    Par défaut Remplir un buffer char*
    Bonsoir tout le monde ,
    je débute en C voila je voulais savoir si c'était possible d’écrire dans un buffer de type char* au lieu d'un fichier
    voila mon vout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    fdest = fopen("\\temp.tmp", "wb");
    		fprintf(fdest, "BM");	
    		fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff, ((0) >> 24) & 0xff);
    		fprintf(fdest, "%c%c%c%c", (54) & 0xff, ((54) >> 8) & 0xff,((54) >> 16) & 0xff, ((54) >> 24) & 0xff);
    je souhaite au lieu d’écrire directement dans le fichier utiliser un char* et le remplir,
    la solution bête que j'ai trouvé c'est d'écrire dans le fichier le fermer puis le recharger en mémoire comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    source= fopen("\\temp.tmp","rb");
    	fseek(source, 0, SEEK_END);
    	outputSize = ftell(source);
    	fseek(source, 0, SEEK_SET);
     
    	unsigned char* out = out =(unsigned char *) malloc(outputSize);
    	 fread(out,1,outputSize, source);
    	fclose(source);
    je vous en serai très reconnaissant si vous pouviez m'aider à trouver une solution

    cdt,

  2. #2
    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
    Tu peux utiliser les fonctions sprintf() et snprintf() de la bibliothèque standard, qui sont faites pour cela, au lieu de fprintf(). Attention de prévoir un tableau de caractères suffisamment grand.

    Avec mes meilleures salutations

    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++

    +

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 3
    Par défaut
    merci beaucoup pour ta réponse je vais tester ça de suite

    cdt,

  4. #4
    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
    Si tu peux te permettre d'utiliser la Glib, la fonction g_vasprintf() peut être intéressante pour toi, car cette fonction s'occupe de l'allocation dynamique de la mémoire pour ton tampon. Cette bibliothèque n'est certes pas standard, mais elle est porté et disponible sur de nombreux systèmes. Par ailleurs, l'implantation GNU de la libc offre la fonction vasprintf() et la fonction asprintf() qui font la même chose. grosso modo la même chose. Ces fonctions ne font toutefois pas partie de la bibliothèque standard comme définie par la norme du langage C ou par POSIX. Ce sont des extensions GNU.

    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++

    +

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 3
    Par défaut
    oui j'aurais préféré ne pas me soucier de l’allocation mémoire mais bon je ne peux pas utiliser la Glib,
    par contre le sprintf a fait l'affaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    i=sprintf(buffer, "BM");
    i += sprintf(buffer+i, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff, ((0) >> 24) & 0xff);
    i += sprintf(buffer+i, "%c%c%c%c", (54) & 0xff, ((54) >> 8) & 0xff,((54) >> 16) & 0xff, ((54) >> 24) & 0xff);
    merci pour ton aide

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

Discussions similaires

  1. Swig C++ Tcl - remplir un buffer
    Par scorbo dans le forum Interfaçage autre langage
    Réponses: 5
    Dernier message: 01/10/2012, 09h02
  2. [WD14] Remplir un buffer
    Par reitsab dans le forum WinDev
    Réponses: 4
    Dernier message: 11/12/2009, 15h08
  3. Réponses: 3
    Dernier message: 08/11/2006, 09h54
  4. Problème de buffer avec des int et des char
    Par Lolita59 dans le forum Réseau
    Réponses: 23
    Dernier message: 04/05/2006, 11h09
  5. passer unee struct dans un buffer (char *)
    Par baert dans le forum C++
    Réponses: 2
    Dernier message: 20/02/2006, 21h49

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