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

  FORUM HardWare.fr
  Programmation
  C

  [C] tableaux et chaines de caractere

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] tableaux et chaines de caractere

n°953846
hotcat
Posté le 16-01-2005 à 13:02:27  profilanswer
 

je débute en C et j'ai un petit probleme...
j'ai un tableau dans lequel j'ai rangé des chaines de caractere avec la fonction strcpy ( strcpy(diff[x],"EASY" ); )
 
mon probleme est que je voudrai extraire la chaine contenu dans diff[x] pour la ranger dans diff2[y] par exemple
 
est ce qu'il existe une fonction qui permette de faire ca ?, ou en utilisant des pointeurs... [:hotcat]  
 
merci d'avance pour votre aide :)

mood
Publicité
Posté le 16-01-2005 à 13:02:27  profilanswer
 

n°953851
Taz
bisounours-codeur
Posté le 16-01-2005 à 13:22:41  profilanswer
 

- pas de copie : simple affectation
- copie : strcpy
 
mais fais donc voir comment t'alloue tes diff / diff2

n°953877
hotcat
Posté le 16-01-2005 à 14:13:42  profilanswer
 

ok.. je savais pas qu'on pouvais utiliser strcpy pour copier une chaine dans un tableau  :ange:  
 
en fait se que j'essai de faire c'est la partie sauvegarde des scores d'un jeux, apres quelques parties je me retrouve avec 3 tableaux:
 
les noms:  le niveau:    le score:
   
pierre       easy            5
paul         medium         2
hotcat      easy           3
azert        hard            8
 
je cherche a reclasser ces infos en fonction du niveau dans un premier temps, et ensuite en fonction du score
je sait pas si je suis claire mais bon...
 
pour allouer les tableaux ? un extrait:

Code :
  1. char diff[10][7];
  2. int niveau=0,win;
  3. if(niveau==1)
  4. {
  5.     strcpy(diff[win],"EASY" );
  6. }   
  7. if(niveau==2)
  8. {
  9.     strcpy(diff[win],"MEDIUM" );
  10. }
  11. if(niveau==3)
  12. {
  13.     strcpy(diff[win],"HARD" );
  14. }


Message édité par hotcat le 16-01-2005 à 14:14:51
n°953880
hotcat
Posté le 16-01-2005 à 14:18:01  profilanswer
 

en fait comme ca ca marche...

Code :
  1. main()
  2. {
  3.     int diff[1][20],diff2[1][20];
  4.     strcpy(diff[1],"EASY" );
  5.    
  6.     strcpy(diff2[1],diff[1]);
  7.     printf("\n%s",diff2[1]);
  8.     getch();
  9. }


 
...mais j'ai des warning du type:
[Warning] passing arg 1 of `strcpy' from incompatible pointer type  
 
 

n°953881
Taz
bisounours-codeur
Posté le 16-01-2005 à 14:18:30  profilanswer
 

ben c'est bon, sauf que tu ferais bien d'initialiser win. Et fait gaffe à la longeur de tes chaines  "MEDIUM" -> ça fait tout pile 7

n°953889
hotcat
Posté le 16-01-2005 à 14:28:32  profilanswer
 

étant donné que ca marche comme ca je veut bien mais y a pas un moyen de virer les warning ?

n°953890
push
/dev/random
Posté le 16-01-2005 à 14:29:28  profilanswer
 

pq tu leurs donnes un type int à tes tableaux ?

n°953891
Taz
bisounours-codeur
Posté le 16-01-2005 à 14:30:18  profilanswer
 

pour avoir un warning tiens-donc

n°953895
hotcat
Posté le 16-01-2005 à 14:34:24  profilanswer
 

ok je sort...
 
et merci pour l'aide :jap:

n°954118
Emmanuel D​elahaye
C is a sharp tool
Posté le 16-01-2005 à 21:08:35  profilanswer
 

hotcat a écrit :

en fait comme ca ca marche...

Non, ça ne 'marche' pas. Ce code est gravement buggé.

Citation :


main()
{
    int diff[1][20],diff2[1][20];
    strcpy(diff[1],"EASY" );
     
    strcpy(diff2[1],diff[1]);
 
    printf("\n%s",diff2[1]);
 
    getch();
}


...mais j'ai des warning du type:
[Warning] passing arg 1 of `strcpy' from incompatible pointer type

Normal, pour un chaine, il faut un tableau de 'char' et non de 'int'. strcpy() attend des adresses de char...
 
d'autre part, si diff a une taille de 1, diff[1] est hors limite. Le comportement est indéfini.  
 
Rappel : pour un tableau de taille N, les indices valides vont de 0 à N-1.


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
mood
Publicité
Posté le 16-01-2005 à 21:08:35  profilanswer
 

n°954475
db__
spécialiste de l'à peu près
Posté le 17-01-2005 à 12:45:31  profilanswer
 

Je suis d'accord avec Mr Delahaye, il y a une grosse bogue sur l'utilisation des variables déclarées. Si cela marche c'est parceque par chance la zone mémoire où sont stockées les chaines ne sont pas modifiées par ailleurs et que cette zone est dans le segment données utilisable par le programme. Dans ce cas je dirais qu'il vaut mieux ne pas avoir de chance car cela rend d'autant plus difficile la recherche de la bogue.
En ce qui concerne le type, C a (à mon gout) l'avantage d'être faiblement typé; il vaut tout de même mieux utilisé un transtypage tel (char) pour convertir explicitement les types. Cela facilite la relecture, le débogage et montre que l'auteur à fait volontairement un transtypage en connaissance de cause. Dans le code sité, le transtypage implicite montre une erreur de déclaration de type pour les variables diff


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

  [C] tableaux et chaines de caractere

 

Sujets relatifs
[HTML] Problème de tableaux avec mon site sous FirefoxFormatage d'un caractère spécial dans une chaine
Re probleme avec les tableauxtableaux
[Shell] Comparaison de chaines ----> résolu avec grep :)obtenir une chaine de caractère avec System.in.read()
chaine de caractèrevaleur octal d'un caractere
conversion d'une chaine de caractère en un entier uniquecss et tableaux
Plus de sujets relatifs à : [C] tableaux et chaines de caractere


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