ok, autant pour moi... sprintf ne renvoie pas le pointeur sur la chaine mais le nb de caractères imprimés...
version sans controle de débordement de chaines:
char chaine[BEAUCOUP], tmp[UNPEUMOINS];
int tab[PASMALNONPLUS], nb, i;
strcpy(chaine, "(" );
for ( i=0 ; i<nb-1 ; i++ )
{
sprintf(tmp, "%d,", tab[i]);
strcat(chaine, tmp);
}
if ( nb != 0 )
{
sprintf(tmp, "%d", tab[nb-1]);
strcat(chaine, tmp);
}
strcat(chaine," )" );
version avec controle de débordements de chaines :
char chaine[BEAUCOUP];
int tab[PASMALNONPLUS], nb, i;
strcpy(chaine, "(" ); // inutile de se prendre la tete ici...
for ( i=0 ; i<nb-1 ; i++ )
snprintf(tampon, BEAUCOUP, "%s%d,", tampon, tab[i]);
if ( nb != 0 )
snprintf(tampon, BEAUCOUP, "%s%d)", tampon, tab[nb-1]);
Je n'ai pas réussi à savoir dans la doc si snprintf copié forcément un \0 à la fin de la chaine (meme en cas de troncation)... si non, il faut en mettre un avant et limiter les copies à BEAUCOUP-1
char chaine[BEAUCOUP];
int tab[PASMALNONPLUS], nb, i;
chaine[BEAUCOUP-1]='\0';
strcpy(chaine, "(" ); // inutile de se prendre la tete ici...
for ( i=0 ; i<nb-1 ; i++ )
snprintf(tampon, BEAUCOUP-1, "%s%d,", tampon, tab[i]);
if ( nb != 0 )
snprintf(tampon, BEAUCOUP-1, "%s%d)", tampon, tab[nb-1]);
difficile de faire plus rapide (d'éviter la copie). la seule solution serait de compter les caractères ajoutés à chaque strcat dans la première version et d'en déduire la limite du strncat... bon ok, c'est faisable
Mogi.