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 :

Problème au niveau du sprintf


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de zentaf
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    122
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 122
    Par défaut Problème au niveau du sprintf
    Bonjour à tous,

    j'ai écrit une fonction en C qui transforme un tableau de bytes en un string.
    Ma fonction marche super bien sous Linux. Maintenant, je suis passé à Windows pour la tester et là ça fait des trucs bizarres, d'après mes tests c'est le sprintf qui foire.

    Voyez vous c'est quoi le problème?? car moi ça m'a rendu fou

    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
    16
    17
    18
    19
    20
    21
    22
    23
     
    #include <stdio.h>
    #include <string.h>
     
    void bytesToString(unsigned char *bytes,int t_bytes,char *string){
     
       int i; 
       char tmp[]="00";
     
        for(i=0;i<t_bytes;i++){
            sprintf(tmp,"%02hx",bytes[i]);
            strcat(string,tmp);
        }
    }
     
    int main(){
     
            unsigned char bytes[4]={0xf1,0xf2,0xf3,0xf4};
            char str[2*4+1];
            bytesToString(bytes, 4,str);
            printf("\n%s\n",str);
            return 0;
    }
    Merci,
    ilikecz

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Bonjour,

    As-tu vérifié que ce n'est un problème de little/big endian ?

    Sinon tu as une solution relativement simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char conversion[] = '1','2',....'F';
    tab[i] = conversion[nombre%16];
    tab[i+1] = conversion[nombre/16];

  3. #3
    Membre confirmé Avatar de zentaf
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    122
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 122
    Par défaut
    Merci pour ton code, mais franchement je préfère le mien pour la simple raison que cette fonction je l'utilise un petit peu partout dans mon projet, donc je ne veux pas changer.

    ce qui m'étonne c'est le comportement du sprintf qui, en faisant un debug, j'ai pu remarqué qu'il s'exécute une fois et après on sort directement de la boucle, avec une valeur de i=49

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Déjà ton code minimal ne compile pas.
    Tu as oublié un return 0 et aussi de déclarer i.
    De plus studio.h n'existe pas

    Je pense que ton erreur vient de cette ligne :
    Ici tu déclare un tableau de char d'un char.

    Il faut faire :

  5. #5
    Membre confirmé Avatar de zentaf
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    122
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 122
    Par défaut
    oui j'ai dû me tromper quand j'ai rédigé sur le forum, mais sinon ce n'est pas ça le problème, mon code compile bien et même marche parfaitement sous linux \o/

    pour tmp j'avais mis char tmp[]="00"; il se débrouille après. mais le problème ne vient pas de ça ni des remarques que tu m'as faites.

    Merci qd même =) essayes un debug pour voir -si tu peux bien sûr- c'est le sprintf qui foire :S

  6. #6
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Je suis aussi sous Linux.
    Peut-être que c'est le format hx qui n'est pas reconnu sous windows?
    Pourrais-tu nous montrer ce que donne le sprintf ?

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

Discussions similaires

  1. [UBUNTU] Problème au niveau du partitionnement
    Par Louis-Guillaume Morand dans le forum Ubuntu
    Réponses: 19
    Dernier message: 19/07/2006, 18h05
  2. [CSS] Problème au niveau de la résolution
    Par shukin dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 28/10/2005, 13h29
  3. [PPC][C#][SQL2000] Problème au niveau de donné controlé
    Par Roach dans le forum Windows Forms
    Réponses: 16
    Dernier message: 21/09/2005, 22h08
  4. problème au niveau de restore database
    Par Redouane dans le forum Administration
    Réponses: 2
    Dernier message: 07/09/2005, 11h49
  5. [DNS MX]Avec DynDNS.org, problème au niveau du MX
    Par Swoög dans le forum Développement
    Réponses: 9
    Dernier message: 24/08/2004, 22h00

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