web-dev-qa-db-fra.com

Comment convertir un entier en chaîne en C?

J'ai essayé cet exemple:

/* 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 l'exemple il ne fonctionne pas (il dit que la fonction itoa n'existe pas).

171
janko-m

Utilisez sprintf() :

int someInt = 368;
char str[12];
sprintf(str, "%d", someInt);

Tous les nombres pouvant être représentés par int s'intègreront dans un tableau de 12 caractères sans débordement, sauf si votre compilateur utilise plus de 32 bits pour int. Lorsque vous utilisez des nombres de plus grande taille, par ex. long avec la plupart des compilateurs 64 bits, vous devez augmenter la taille du tableau, d'au moins 21 caractères pour les types 64 bits.

272
qwertz

Faire votre propre itoa est également facile, essayez ceci:

char* itoa(int i, char b[]){
    char const digit[] = "0123456789";
    char* p = b;
    if(i<0){
        *p++ = '-';
        i *= -1;
    }
    int shifter = i;
    do{ //Move to where representation ends
        ++p;
        shifter = shifter/10;
    }while(shifter);
    *p = '\0';
    do{ //Move back, inserting digits as u go
        *--p = digit[i%10];
        i = i/10;
    }while(i);
    return b;
}

ou utilisez la fonction standard sprintf().

51
bhuwansahni

C'est parce que itoa n'est pas une fonction standard. Essayez snprintf à la place.

char str[LEN];
snprintf(str, LEN, "%d", 42);
44
cnicutar