39 votes

Convertir int en chaîne en C

Je utilise la fonction itoa() pour convertir un int en string, mais cela donne une erreur :

référence non définie vers `itoa'
collect2: ld a renvoyé 1 statut de sortie

Quelle est la raison? Y a-t-il un autre moyen de réaliser cette conversion?

3voto

ThiefMaster Points 135805

Généralement, snprintf() est la meilleure option :

char str[16]; // pourrait être moins mais je suis trop paresseux pour chercher la longueur maximale réelle d'un entier
snprintf(str, sizeof(str), "%d", votre_entier);

2voto

Gewure Points 646
void itos(int value, char* str, size_t size) {
    snprintf(str, size, "%d", value);
}

..fonctionne avec appel par référence. Utilisez-le comme ceci par exemple :

int someIntToParse;
char resultingString[length(someIntToParse)];

itos(someIntToParse, resultingString, length(someIntToParse));

maintenant resultingString contiendra votre 'chaîne' C.

2voto

mehrdad khosravi Points 2134
char string[quelquechose];
sprintf(string, "%d", 42);

1voto

Safayet Ahmed Points 648

Implémentation similaire à Ahmad Sirojuddin mais avec une sémantique légèrement différente. D'un point de vue sécurité, chaque fois qu'une fonction écrit dans un tampon de chaîne, la fonction devrait vraiment "savoir" la taille du tampon et refuser d'écrire au-delà de sa fin. Je suppose que c'est en partie la raison pour laquelle vous ne pouvez plus trouver itoa.

De plus, l'implémentation suivante évite d'effectuer l'opération de module/division deux fois.

char *u32todec( uint32_t    value,
                char        *buf,
                int         size)
{
    if(size > 1){
        int i=size-1, offset, bytes;
        buf[i--]='\0';
        do{
            buf[i--]=(value % 10)+'0';
            value = value/10;
        }while((value > 0) && (i>=0));
        offset=i+1;
        if(offset > 0){
            bytes=size-i-1;
            for(i=0;i

`Le code suivant teste à la fois le code ci-dessus et démontre sa validité :

int main(void)
{
    uint64_t acc;
    uint32_t inc;
    char buf[16];
    size_t bufsize;
    for(acc=0, inc=7; acc<0x100000000; acc+=inc){
        printf("%u: ", (uint32_t)acc);
        for(bufsize=17; bufsize>0; bufsize/=2){
            if(NULL != u32todec((uint32_t)acc, buf, bufsize))
                printf("%s ", buf);
        }
        printf("\n");
        if(acc/inc > 9)
            inc*=7;
    }
    return 0;
}`

0voto

Ishu Points 8284

Voir cet exemple

#include  // pour l'appel itoa()
#include   

int main() {
    int num = 145;
    char buf[5];

    // convertir 123 en chaîne [buf]
    itoa(num, buf, 10);

    // imprimer notre chaîne
    printf("%s\n", buf);

    return 0;
}

voir ce lien contenant d'autres exemples.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X