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 :

fonction itoa sous linux


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Avril 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 7
    Par défaut fonction itoa sous linux
    bonjour,
    j'essaye d'exécuter le code suivant sous linux j'ai utilisé sprintf() et snprintf() au lieu de printf() mais tjrs j'ai les mêmes erreurs :
    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
    /* itoa example */
    #include <stdio.h>
    #include <stdlib.h>
     
    int main ()
    {
      int i;
      char buffer [33];
      printf ("Enter a number: ");
      scanf ("%d",&i);
      itoa (i,buffer,10);
      printf ("decimal: %s\n",buffer);
      itoa (i,buffer,16);
      printf ("hexadecimal: %s\n",buffer);
      itoa (i,buffer,2);
      printf ("binary: %s\n",buffer);
      return 0;
    }
    mais j'ai les erurs suivantes
    [root@CeA3 itoa]# ls
    1.c 1.o
    [root@CeA3 itoa]# gcc -o itoa 1.o
    1.o(.text+0x4d): In function `main':
    : undefined reference to `itoa'
    1.o(.text+0x75): In function `main':
    : undefined reference to `itoa'
    1.o(.text+0x9d): In function `main':
    : undefined reference to `itoa'
    collect2: ld a retourné 1 code d'état d'exécution
    je me demande si ne fonctionne pas sous linux ou quoi et merci

  2. #2
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    je me demande si
    ne fonctionne pas sous linux ou quoi et merci
    itoa n'est pas standard au C, utilise sprintf. En faisant attention aux débordements de tableaux.

    Jc

  3. #3
    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 Re: fonction itoa sous linux
    Citation Envoyé par skoukni_brahim
    bonjour,
    j'essaye d'exécuter le code suivant sous linux:
    itoa() n'étant pas une fonction standard, tout peut arriver...

    sprintf() est ton ami (ou mieux, snprintf() si tu as C99)

  4. #4
    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
    Le problème, c'est que sprintf()/snprintf() ne savent pas afficher en base 2...
    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.

  5. #5
    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 Médinoc
    Le problème, c'est que sprintf()/snprintf() ne savent pas afficher en base 2...
    Exact. Il faut ecrire sa fonction.

  6. #6
    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
    Allez, je viens d'en ressortir une de mes tiroirs:
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    /*****************************************************************************
     Fonction pour formater un nombre en toute base
     ==============================================
     
     Le nombre est placé à la fin du buffer fourni, car c'est ainsi que se fait
     naturellement la conversion. L'adresse du nombre dans le buffer est retournée.
     
     +------+-------+
     |      |123456*|
     +------+-------+
             ^
             |
       pointeur retourné
     
     *****************************************************************************/
     
    #include <stdlib.h>
     
    char * FormatEntier(
     unsigned long uNombre,	/*[in] Nombre à convertir */
     unsigned int const uBase,	/*[in] Base */
     int const bNombreSigne,	/*[in] TRUE si le nombre est signé */
     char * const szBuffer,	/*[out] Buffer de caractères */
     size_t nCchBuffer	/*[in] Taille du buffer, en caractères */
     )
    {
    int bNegatif = 0;
    char * pt_carac = szBuffer + nCchBuffer;
     
    /* Le buffer doit faire au moins 1 caractère: Le carac. nul. */
    if(nCchBuffer < 1)
    	return 0;
     
    /* Place le zéro terminal */
    --pt_carac, --nCchBuffer;
    *pt_carac = '\0';
     
    /* Ajuste le nombre s'il est négatif */
    if(bNombreSigne)
    	{
    	long nNombre = uNombre;
    	if(nNombre < 0)
    		{
    		/* Prend la valeur absolue du nombre et mémorise le fait
    			qu'il faille le précéder d'un '-' */
    		nNombre = -nNombre;
    		uNombre = nNombre;
    		bNegatif = 1;
    		}/* if négatif */
    	}/* if signé */
     
    /* Convertit le nombre */
    do	{
    	unsigned int const uChiffre = uNombre % uBase;
     
    	if(nCchBuffer == 0)
    		break;
     
    	uNombre /= uBase;
     
    	/* Ajoute le chiffre à la fin */
    	--pt_carac, --nCchBuffer;
    	*pt_carac = (char)( (uChiffre < 10) ? ('0'+uChiffre) : ('A'+(uChiffre-10)) );
    	} while(uNombre);
     
    /* Rajoute le signe - si négatif et s'il y a la place */
    if(bNegatif)
    	{
    	if(nCchBuffer==0)
    		{
    		/* Plus de place */
    		}
    	else
    		{
    		--pt_carac, --nCchBuffer;
    		*pt_carac = '-';
    		}
    	}
    return pt_carac;
    }
    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.

Discussions similaires

  1. soucis avec la fonction sleep() sous linux
    Par TriPlank12 dans le forum Linux
    Réponses: 1
    Dernier message: 07/11/2009, 18h54
  2. GetCurrentDir fonction sous Linux
    Par uriotcea dans le forum Linux
    Réponses: 8
    Dernier message: 31/07/2007, 21h18
  3. Réponses: 7
    Dernier message: 20/07/2007, 14h48
  4. fonction sleep() en C sous Linux
    Par makohsarah dans le forum POSIX
    Réponses: 5
    Dernier message: 05/06/2006, 15h06
  5. fonction "inb" sous linux; port parallele
    Par be_net dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 09/06/2004, 11h39

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