Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2573 connectés 

 


Dernière réponse
Sujet : [c] tableau d'entier en chaine de caratères ???
mario51 C'EST BON, CA MARCHE !!!
 
MERCI MOGI ;)

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
mario51 C'EST BON, CA MARCHE !!!
 
MERCI MOGI ;)
godbout

BENB a écrit a écrit :

 
c'est pas standard snprintf... tous les compilos ne l'ont pas...  




 
si j'ai dit ca c'est juste "pour le premier sprintf"

mario51 J'ai essaye la 1ere version :
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," )" );  
 
 
ca compil, mais ca marche pas !!!???
 
HELP !!!
BENB

Godbout a écrit a écrit :

t'as deja fait du C ??
c'est pour tous les snprintf, il reconnait pas alors soit ca existe pas, soit t'as pas inclu le .h ou la lib.  




c'est pas standard snprintf... tous les compilos ne l'ont pas...

godbout essaie _snprintf
godbout t'as deja fait du C ??
c'est pour tous les snprintf, il reconnait pas alors soit ca existe pas, soit t'as pas inclu le .h ou la lib.
mario51 Quand je compil, j'ai un warning :
'snprintf' undefined; assuming extern returning int
 
pour le premier snprintf???
mario51 "en direct, si j'ai bien compris la question... t'as un tableau d'entiers, et tu veux une chaine de caractères de la forme "(XX,Y,ZZZ,...)" avec les élements de ton tableau."
 
C'est exactement ca que je veux faire.
Oh fait, dans ton code: tampon, c'est quoi?
Et pour mettre les virgules?
mario51 Merci les gars!
 
Je test ca et je vous tiens au courant...
 
@+
mogi 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.
mogi 'y sait plus écrire:
 
strcat -> strncat
strcpy -> strncpy
sprintf -> ????
 
(le lecteur aura corrigé de lui-meme :) )
 
Mogi.
mogi en direct, si j'ai bien compris la question... t'as un tableau d'entiers, et tu veux une chaine de caractères de la forme "(XX,Y,ZZZ,...)" avec les élements de ton tableau.
 
char chaine[BEAUCOUP], tmp[UNPEUMOINS];
int tab[PASMALNONPLUS], nb, i;
 
strcpy(chaine, "(" );
for ( i=0 ; i<nb-1 ; i++ )
  strcat(chaine, sprintf(tmp, "%d,", tab[i]));
if ( nb != 0 )
  strcat(chaine, sprintf(tmp, "%d", tab[nb-1]));
strcat(chaine," )" );
 
Alors, maintenant question subsidiaire : comment kon fait si on veut en meme temps pouvoir controler les débordement de chaines ? pour strcpy et strcat, il y a strncpy où l'on précise la taille max de la chaine, mais pour strprint ? kkun a une idée parce que ce serait quand meme plus secure...
 
Mogi.
Buitoni

mario51 a écrit a écrit :

En fait, je veux concatener mon tableau d'entier avec une chaine de caracteres pour que le tout soit une chaine de caracteres.
 
Si je copie les entiers dans une chaine un par un, ils sont transformés !  




cad?
 
Si tu vois des petits coeurs, ou des petits bonshommes, c'est normal... l'entier 15 est pas equivalent a sa representation ascii hein :-D

mario51 En fait, je veux concatener mon tableau d'entier avec une chaine de caracteres pour que le tout soit une chaine de caracteres.
 
Si je copie les entiers dans une chaine un par un, ils sont transformés !
Machine Ton probleme  n'est pas tres clair !
Une chaine de caractère c'est a peu pres pareil qu'un tableau d'entier sauf que c'est sur un seul octet et ca se finit par \0
Pour afficher en caractères un tableau d'entier tu peus tres bien faire printf(%c,tab[i]) avec boucle ou rajouter un \0 a la fin et faire un printf("%s",tab)
mario51 Salut!
Voila mon probleme :
J'ai un tableau d'entier qui contient donc des entiers >10 et je souhaites transformer ce tableau en tableau (ou en chaine) de caracteres et pouvoir ainsi retourner une chaine et afficher sous forme : (10,11,12,13...)
 
D'avance merci!

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)