2010-05-16 5 views
1

J'ai l'intention de remplir un tableau de char-pointeur successivement dans une boucle for. le contenu à remplir est un entier, donc je dois lancer. mais je ne l'ai pas obtenu le résultat que je veux ..remplir un tampon successivement

for (i=0;i<max0;i++){ 
    sprintf(buf, "%d", content[i]); 
} 

sprintf remplace le buf trou, mais je veux ajouter.

for (i=0;i<max0;i++){ 
    buf[i]=(char) contint[i] 
} 

mais cela ne fonctionne pas aussi. il me semble, je reçois le code ascii du contenu [i].

+0

Vous ne pouvez pas convertir un nombre en char comme ça avec la sortie attendue. L'entier peut être -2 147 483 648, 2 147 483 647 ou n'importe quoi d'autre (en supposant ici 32 bits). Un caractère ne correspond qu'à 0 - 255 (-128 - 127). – LukeN

+0

la valeur déclenche 0/1 – mkind

Répondre

0

je l'ai résolu en utilisant snsprintf

for (i=0;i<max0;i++){ 
    length += snprintf(buf+length, buflen-length, "%d", content[i]); 
} 

merci pour vos réponses !!

+0

Le deuxième argument de snprintf est unsigned (size_t), cela signifie que si longueur> buflen, alors buflen-longueur va déborder et snprintf écrira heureusement à l'extérieur de la mémoire tampon en créant un buffer overflow. Notez que le retour de snprintf est égal au nombre d'octets qui auraient été écrits si suffisamment d'espace avait été disponible et pas le nombre d'octets réellement écrits. –

2

sprintf Renvoie le nombre de caractères écrits. Vous pouvez utiliser ceci en ajoutant les entiers au tampon.

Quelque chose comme:

int pos = 0; 
for (i=0;i<max0;i++){ 
    pos += sprintf(buf+pos, "%d", content[i]); 
} 
+0

ouais, je vais essayer snprintf. merci: D .. parfois la première idée est la meilleure. damn it :) – mkind

0

utiliser ceci:

for (i=0; i<max0; ++i){ 
    sprintf(buf, "%d", content[i]); 
    strcat(resultbuf, buf); 
} 
1

Vous pouvez accomplir cela en utilisant l'arithmétique de pointeur:

char *p = buf; 
for (i=0;i<max;i++) 
{ 
     int num_written = sprintf(p, "%d", content[i]); 
     if(num_written == -1) 
     { 
     //error handling 
     break; 
     } 

     p += num_written; 
} 
0

Je pense que cela peut paraître stupide, mais j'ai modifié votre code quelque chose comme ceci: -

for (i=0;i<max0;i++){ 
    buf[i]=(char) (48+ contint[i]); 
} 

// ici 48 est le code ascii de 0

Questions connexes