un autre probleme se pose .......

un autre probleme se pose ....... - C++ - Programmation

Marsh Posté le 27-08-2002 à 09:38:19    

je voudrais savoi une chose  
 
j'ai cette declarations de variable
 

Code :
  1. char nom[64]


 
et je voudrais savoir que renvois la valeur nom[65]
elle renvoie la veleur NULL ???


Message édité par Lenoiche le 27-08-2002 à 10:54:36
Reply

Marsh Posté le 27-08-2002 à 09:38:19   

Reply

Marsh Posté le 27-08-2002 à 09:49:04    

Et bien en fait, quand tu as un   char nom[64]  tu as réservé un espace mémoire de taille 64 fois la taille d'un char. Or comme le premier indice de tout tableau est 0, nom[64] est comme nom[65] et sont tous les deux indéfinis et pas nécessairement NULL.

Reply

Marsh Posté le 27-08-2002 à 10:10:12    

BB138 a écrit a écrit :

Et bien en fait, quand tu as un   char nom[64]  tu as réservé un espace mémoire de taille 64 fois la taille d'un char. Or comme le premier indice de tout tableau est 0, nom[64] est comme nom[65] et sont tous les deux indéfinis et pas nécessairement NULL.




 
arf zut ca m arrange pas ca
j aurias bien aime qu il renvoie la valeur NULL
 
bon jvais devoir trouve un autre moyen

Reply

Marsh Posté le 27-08-2002 à 10:11:22    

C'est pour quel besoin ?

Reply

Marsh Posté le 27-08-2002 à 10:11:47    

Lenoiche a écrit a écrit :

 
 
arf zut ca m arrange pas ca
j aurias bien aime qu il renvoie la valeur NULL
 
bon jvais devoir trouve un autre moyen




 
Ben t'as la sollution:

Code :
  1. char nom[65];
  2. nom[64] = 0;


Reply

Marsh Posté le 27-08-2002 à 10:13:10    

Lenoiche a écrit a écrit :

 
 
arf zut ca m arrange pas ca
j aurias bien aime qu il renvoie la valeur NULL
 
bon jvais devoir trouve un autre moyen



t'aimes bien jouer avec le feu et les écrans bleus toi... :heink:


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 27-08-2002 à 10:16:02    

Harkonnen a écrit a écrit :

t'aimes bien jouer avec le feu et les écrans bleus toi... :heink:  




 
:P
moi j suis un freestyler , qui fais des figure de style en programamtion que tu verra jamais :D
 
sinan y a t'il une instruction qui permette de me donner la taille d'un tableau ???

Reply

Marsh Posté le 27-08-2002 à 10:17:23    

non

Reply

Marsh Posté le 27-08-2002 à 10:20:04    

Ben faut utiliser le vector de la STL qui fais tout ca propre.

Reply

Marsh Posté le 27-08-2002 à 10:21:38    

Joel F a écrit a écrit :

Ben faut utiliser le vector de la STL qui fais tout ca propre.




 
Commence pas à l'embrouiller avec le C++. quand il maitrisera mieu le C on verra :D

Reply

Marsh Posté le 27-08-2002 à 10:21:38   

Reply

Marsh Posté le 27-08-2002 à 10:23:30    

oups desole ...
ben sinon y a toujours  
 

Code :
  1. struct Tableau
  2. {
  3.   int* valeur;
  4.   int taille;
  5. };


 
mais ca deviens plus chiant la tout de suite ...

Reply

Marsh Posté le 27-08-2002 à 10:30:11    

Joel F a écrit a écrit :

oups desole ...
ben sinon y a toujours  
 

Code :
  1. struct Tableau
  2. {
  3.   int* valeur;
  4.   int taille;
  5. };


 
mais ca deviens plus chiant la tout de suite ...




 
ha yes pas con ca !!!!
 
j avais pas penser a faire definir une structure propre
 
merci mister
:jap:

Reply

Marsh Posté le 27-08-2002 à 10:35:55    

Lenoiche a écrit a écrit :

je voudrais savoi une chose  
 
j'ai cette declarations de variable
 

Code :
  1. char nom[64]


 
et je voudrais savoir que renvois la valeur nom[65]
elle renvoie la veleur NULL ???


Segmentation fault (core dumped).


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
Reply

Marsh Posté le 27-08-2002 à 10:38:21    

Jar Jar a écrit a écrit :

Segmentation fault (core dumped).




 
Pas nécessairement

Reply

Marsh Posté le 27-08-2002 à 10:40:38    

Jar Jar a écrit a écrit :

Segmentation fault (core dumped).




 
:non:  
 
La mémoire ne peut être "Read"


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 27-08-2002 à 10:45:40    

letoII a écrit a écrit :

Pas nécessairement


Hélas non. Mais l'utilisation d'un malloc debugger le fera arriver.


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
Reply

Marsh Posté le 27-08-2002 à 10:49:15    

Jar Jar a écrit a écrit :

Hélas non. Mais l'utilisation d'un malloc debugger le fera arriver.




 
arretez de vous battre mes amis !!!
vu que joel m a donne une autre perspective et du coup j aurais pas a faire des trucs de barbares :D

Reply

Marsh Posté le 27-08-2002 à 10:55:16    

Lenoiche a écrit a écrit :

 
sinan y a t'il une instruction qui permette de me donner la taille d'un tableau ???




Par taille, tu veux dire le nb (max) d'elements?
Si c'est vraiment un tableau et qu'il a au moins un element, en C, tu peux faire: sizeof(T)/sizeof(T[0]).
A+,


Message édité par gilou le 27-08-2002 à 10:56:26

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 27-08-2002 à 10:55:46    

au sujet de la structure Tableau de joel
 
struct Tableau  
  {  
      int* valeur;  
      int taille;  
  }Variable[64];
 
 
comment on fait appelle au champs taille
 
Variable.taille suffit ou bient Variable[].taille ????

Reply

Marsh Posté le 27-08-2002 à 11:00:43    

L'instruction :

Code :
  1. struct Tableau 
  2.      int* valeur; 
  3.      int taille; 
  4. }Variable[64];


fait 2 choses : elle définit un type structure, et déclare une variable de type tableau de cette structure (au passage, il aurait mieux valu couper en 2 cette instruction...  :sarcastic: )
 
"Variable" est donc un tableau de "struct Tableau". "taille" est un champ de la "struct Tableau". Par conséquent, il faut donc accéder à une des entrées du tableau "Variable", pour pouvoir accéder au champ "taille" de cette entrée-là.
 
Donc : Variable[i].taille, où i est un entier.

Reply

Marsh Posté le 27-08-2002 à 11:00:56    

Lenoiche a écrit a écrit :

au sujet de la structure Tableau de joel
 
struct Tableau  
  {  
      int* valeur;  
      int taille;  
  }Variable[64];
 
 
comment on fait appelle au champs taille
 
Variable.taille suffit ou bient Variable[].taille ????  




 
Ben comme t'as fait un tableau:

Code :
  1. Variable[index].taille

Reply

Marsh Posté le 27-08-2002 à 11:01:21    

Pas assez rapide, petit scarabée...  ;)

Reply

Marsh Posté le 27-08-2002 à 11:01:54    

Lenoiche a écrit a écrit :

au sujet de la structure Tableau de joel
 
struct Tableau  
  {  
      int* valeur;  
      int taille;  
  }Variable[64];
 
 
comment on fait appelle au champs taille
 
Variable.taille suffit ou bient Variable[].taille ????  




euh, tu te loupes un peu la !! ce que tu fais, c'est déclarer un tableau de 64 structures !!!
 
je suppose que joel voulait te faire stocker tes valeurs dans le champ valeur, alloué préalablement en fonction du champ taille.
 
donc :
 
tableau.taille = 64;
tableau.valeur = (int *)malloc(sizeof(int) * tableau.taille);


Message édité par Harkonnen le 27-08-2002 à 11:02:39

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 27-08-2002 à 11:02:14    

BifaceMcLeOD a écrit a écrit :

Pas assez rapide, petit scarabée...  ;)  




 
argh! :D

Reply

Marsh Posté le 27-08-2002 à 11:04:45    

non tu l'utilise comme ca.
 

Code :
  1. typedef struct Tableau
  2. {
  3. int* valeur;
  4. int taille;
  5. int valide;
  6. };
  7. void initTableau( Tableau* tab, int size )
  8. {
  9.   if( tab && size )
  10.   {
  11.      tab->valeur = (int*)malloc(size*sizeof(int));
  12.      tab->taille = size;
  13.      tab->valide = 1;
  14.   }
  15.   else
  16.   {
  17.      tab->valeur = NULL;
  18.      tab->taille = 0;
  19.      tab->valide = 0;
  20.   }
  21. }
  22. void destroyTableau( Tableau* tab )
  23. {
  24.    if( tab && tab->valide )
  25.    {
  26.      free( tab->valeur );
  27.    }
  28. }
  29. int getValeur( Tableau* tab, int index )
  30. {
  31.    if( tab && tab->valide )
  32.    {
  33.       if( index >= 0 && index < tab->taille )
  34.       {
  35.          return tab->valeur[index];
  36.       }
  37.       else
  38.       {
  39.          return 0;
  40.       }
  41.    }
  42.    else
  43.    {
  44.       return 0;
  45.    }
  46. }

 
 
bon la c du brut de decoffrage, faut continuer dans ce style.

Reply

Marsh Posté le 27-08-2002 à 11:06:06    

Harkonnen a écrit a écrit :

 
euh, tu te loupes un peu la !! ce que tu fais, c'est déclarer un tableau de 64 structures !!!
 
je suppose que joel voulait te faire stocker tes valeurs dans le champ valeur, alloué préalablement en fonction du champ taille.
 
donc :
 
tableau.taille = 64;
tableau.valeur = (int *)malloc(sizeof(int) * tableau.taille);




 
je ne comprends pas trop
comment j accede aux valuer du tableau ????

Reply

Marsh Posté le 27-08-2002 à 11:06:56    

Confere mon poste + haut
 
tu utilise getValeur( tab, index )

Reply

Marsh Posté le 27-08-2002 à 11:09:26    

Lenoiche a écrit a écrit :

 
 
je ne comprends pas trop
comment j accede aux valuer du tableau ????




laisse tomber, c'est moi qui me suis loupé ! :)
 
mais mon idée est plausible aussi ! pour y accéder, tu fais tableau.valeur[i], ou i est compris entre 0 et tableau.taille.
 
par contre, il ne faut pas oublier de faire un free(tableau.valeur) à la fin de ton programme
 


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 27-08-2002 à 11:09:52    

Un exemple complet :
 

Code :
  1. typedef struct Tableau
  2. {
  3. int* valeur;
  4. int taille;
  5. int valide;
  6. };
  7. void initTableau( Tableau* tab, int size );
  8. void destroyTableau( Tableau* tab );
  9. int getValeur( Tableau* tab, int index );
  10. void setValeur( Tableau* tab, int index, int valeur )
  11. {
  12.    if( tab && tab->valide )
  13.    {
  14.       if( index >= 0 && index < tab->taille )
  15.       {
  16.          tab->valeur[index] = valeur;
  17.       }
  18. }
  19. int main()
  20. {
  21.     Tableau tab;
  22.     initTableau( &tab, 64 );
  23.    for( int i = 0; i < 64; i++)
  24.    {
  25.       setTableau( &tab, i, 2*i );
  26.    }
  27.    printf("Le %d ieme elemnt vaut : %d\n", 9, getValeur( &tab, 9 ));
  28.   destroyTableau( &tab );

 


Message édité par Joel F le 27-08-2002 à 11:10:02
Reply

Marsh Posté le 27-08-2002 à 11:10:00    

Lenoiche a écrit a écrit :

 
 
je ne comprends pas trop
comment j accede aux valuer du tableau ????




 
ha oui j ai compris  
en gros  
 
struct Tableau  
  {  
      int valeur[64];  
      int taille;  
  }variable;
 
prefere comem ca car je maitrise pas bien les allocations

Reply

Marsh Posté le 27-08-2002 à 11:13:53    

gilou a écrit a écrit :

 
Par taille, tu veux dire le nb (max) d'elements?
Si c'est vraiment un tableau et qu'il a au moins un element, en C, tu peux faire: sizeof(T)/sizeof(T[0]).
A+,




 
ben en fait j ai une varible de type char *nom
et donc la taille varie souvent ....

Reply

Marsh Posté le 27-08-2002 à 11:13:58    

Lenoiche a écrit a écrit :

 
 
ha oui j ai compris  
en gros  
 
struct Tableau  
  {  
      int valeur[64];  
      int taille;  
  }variable;
 
prefere comem ca car je maitrise pas bien les allocations  




 
euh, ça va pour un tableau de 64 valeurs, mais si tu ne connais pas le nombre d'éléments à l'avance, tu es obligé de passer par une allocation !
 
autre chose : si tu avais par exemple un tableau de structures au lieu d'un tableau d'int, avec un nombre d'éléments assez conséquents, ta solution aurait toutes les chances de saturer la pile !!


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 27-08-2002 à 11:16:08    

Harkonnen a écrit a écrit :

 
 
euh, ça va pour un tableau de 64 valeurs, mais si tu ne connais pas le nombre d'éléments à l'avance, tu es obligé de passer par une allocation !
 
autre chose : si tu avais par exemple un tableau de structures au lieu d'un tableau d'int, avec un nombre d'éléments assez conséquents, ta solution aurait toutes les chances de saturer la pile !!




 
ha oui c vrai tu as tout a fait raison et si je fais ca !!!
 
donc je fais comme Joel a dis
 
merci messieurs
:jap:

Reply

Marsh Posté le 27-08-2002 à 11:16:40    

Lenoiche a écrit a écrit :

 
 
ben en fait j ai une varible de type char *nom
et donc la taille varie souvent ....




comment ça la taille varie ??  :??:  
un char reste un char (généralement un octet)...  :heink:  


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 27-08-2002 à 11:17:59    

Harkonnen a écrit a écrit :

 
comment ça la taille varie ??  :??:  
un char reste un char (généralement un octet)...  :heink:  




 
la taille de la chaine ....

Reply

Marsh Posté le 27-08-2002 à 11:20:05    

Lenoiche a écrit a écrit :

 
 
la taille de la chaine ....




ouh la la ... tu fais de la réallocation dynamique de chaine de caractère ???
 
et tu penses à chaque fois à terminer par '\0' ?
 
tu me fais peur la...[:totoz]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 27-08-2002 à 11:20:28    

si c pour une chaîne de caractères, tu met un '\0' à la fin et tu utilise strlen (string.h)... :sarcastic:

Reply

Marsh Posté le 27-08-2002 à 11:33:39    

letoII a écrit a écrit :

si c pour une chaîne de caractères, tu met un '\0' à la fin et tu utilise strlen (string.h)... :sarcastic:  




 
houlalalalalalala
 
bon vé me cacher moa [:spleen]

Reply

Marsh Posté le 29-08-2002 à 02:47:15    

gilou a écrit a écrit :

Si c'est vraiment un tableau et qu'il a au moins un element,...


Un tableau ne peut pas avoir 0 éléments.
 
 
En se prenant bien la tête:

Code :
  1. //zone .h
  2. //char: plus petit type
  3. //long: plus gros  type
  4. #define dimof(a) (sizeof(a)/sizeof(a[0])) //dimension d'un tableau
  5. //Ces 2 macros donnent accès au ième élément de a, sauf si i est hors limites:
  6. #define arun(a,i) (*((i)>=0&&(i)<dimof(a)?&(a)[i]:(char*)NULL        ))//Erreur à l'exécution: adresse NULL
  7. #define aout(a,i) (*((i)>=0&&(i)<dimof(a)?&(a)[i]:(char*)&outofbounds))//Accès à outofbounds globale.
  8. //zone .c
  9. extern long outofbounds= 0; //lieu et valeur pour indiçages hors limites
  10. int main(){
  11. char tab[64], c1, c2, c3, c4;
  12. int taille= dimof(tab); //pour voir
  13. aout(tab,63)= 'B'; //écrit dans le tableau
  14. aout(tab,64)= 'b'; //écrit dans outofbounds
  15. c1= aout(tab,63) ; //lit depuis le tableau
  16. c2= aout(tab,64) ; //lit outofbounds
  17. arun(tab,63)= 'R'; //écrit dans le tableau
  18. arun(tab,64)= 'r'; //erreur d'exécution
  19. c3= arun(tab,63) ; //lit depuis le tableau
  20. c4= arun(tab,64) ; //erreur d'exécution
  21. return 0;
  22. }


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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