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

  FORUM HardWare.fr
  Programmation

  [c] tableau d'entier en chaine de caratères ???

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[c] tableau d'entier en chaine de caratères ???

n°74680
mario51
Posté le 22-11-2001 à 23:39:44  profilanswer
 

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!

mood
Publicité
Posté le 22-11-2001 à 23:39:44  profilanswer
 

n°74683
Machine
Posté le 23-11-2001 à 00:01:54  profilanswer
 

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)

n°74686
mario51
Posté le 23-11-2001 à 00:14:41  profilanswer
 

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 !

n°74700
Buitoni
Posté le 23-11-2001 à 01:02:30  profilanswer
 

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


---------------
Vendredi c'est Buitoni
n°74716
mogi
Posté le 23-11-2001 à 07:18:19  profilanswer
 

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.

n°74721
mogi
Posté le 23-11-2001 à 07:52:14  profilanswer
 

'y sait plus écrire:
 
strcat -> strncat
strcpy -> strncpy
sprintf -> ????
 
(le lecteur aura corrigé de lui-meme :) )
 
Mogi.

n°74727
mogi
Posté le 23-11-2001 à 08:38:02  profilanswer
 

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.

n°74737
mario51
Posté le 23-11-2001 à 09:19:34  profilanswer
 

Merci les gars!
 
Je test ca et je vous tiens au courant...
 
@+

n°74740
mario51
Posté le 23-11-2001 à 09:22:38  profilanswer
 

"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?

n°74743
mario51
Posté le 23-11-2001 à 09:32:42  profilanswer
 

Quand je compil, j'ai un warning :
'snprintf' undefined; assuming extern returning int
 
pour le premier snprintf???

mood
Publicité
Posté le 23-11-2001 à 09:32:42  profilanswer
 

n°74744
godbout
Génial.
Posté le 23-11-2001 à 09:39:24  profilanswer
 

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.

n°74746
godbout
Génial.
Posté le 23-11-2001 à 09:41:06  profilanswer
 

essaie _snprintf

n°74747
BENB
100% Lux.
Posté le 23-11-2001 à 09:41:18  profilanswer
 

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...

n°74748
mario51
Posté le 23-11-2001 à 09:44:04  profilanswer
 

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 !!!

n°74749
godbout
Génial.
Posté le 23-11-2001 à 09:44:20  profilanswer
 

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"

n°74753
mario51
Posté le 23-11-2001 à 10:05:26  profilanswer
 

C'EST BON, CA MARCHE !!!
 
MERCI MOGI ;)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [c] tableau d'entier en chaine de caratères ???

 

Sujets relatifs
URGENT PHP : comment forcer une variable a passer en chaine de char ??[Java]transformation tableau 1d en tableau 2d
[HTML] disposition dans un tableaucomment avoir le nombre de caractères d'une chaine ?
[C] Tableau de tableauPhP ..parser une chaine de caractere ?
[SQL server] Passer un tableau en parametre d'une procédure stocké?[C] chaine de caractere ?
Ligne par ligne dans un tableau !conversion .txt -> chaine de caractère
Plus de sujets relatifs à : [c] tableau d'entier en chaine de caratères ???


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR