[C] tableaux et chaines de caractere

tableaux et chaines de caractere [C] - C - Programmation

Marsh Posté le 16-01-2005 à 13:02:27    

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 :)

Reply

Marsh Posté le 16-01-2005 à 13:02:27   

Reply

Marsh Posté le 16-01-2005 à 13:22:41    

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

Reply

Marsh Posté le 16-01-2005 à 14:13:42    

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
Reply

Marsh Posté le 16-01-2005 à 14:18:01    

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  
 
 

Reply

Marsh Posté le 16-01-2005 à 14:18:30    

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

Reply

Marsh Posté le 16-01-2005 à 14:28:32    

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

Reply

Marsh Posté le 16-01-2005 à 14:29:28    

pq tu leurs donnes un type int à tes tableaux ?

Reply

Marsh Posté le 16-01-2005 à 14:30:18    

pour avoir un warning tiens-donc

Reply

Marsh Posté le 16-01-2005 à 14:34:24    

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

Reply

Marsh Posté le 16-01-2005 à 21:08:35    

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/
Reply

Marsh Posté le 16-01-2005 à 21:08:35   

Reply

Marsh Posté le 17-01-2005 à 12:45:31    

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed