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

  FORUM HardWare.fr
  Programmation
  C++

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°202558
Lenoiche
Posté le 27-08-2002 à 09:38:19  profilanswer
 

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
mood
Publicité
Posté le 27-08-2002 à 09:38:19  profilanswer
 

n°202568
bb138
La vie est belle ...
Posté le 27-08-2002 à 09:49:04  profilanswer
 

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.

n°202581
Lenoiche
Posté le 27-08-2002 à 10:10:12  profilanswer
 

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

n°202583
bb138
La vie est belle ...
Posté le 27-08-2002 à 10:11:22  profilanswer
 

C'est pour quel besoin ?

n°202584
LetoII
Le dormeur doit se réveiller
Posté le 27-08-2002 à 10:11:47  profilanswer
 

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;


n°202585
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 27-08-2002 à 10:13:10  profilanswer
 

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)
n°202592
Lenoiche
Posté le 27-08-2002 à 10:16:02  profilanswer
 

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

n°202596
LetoII
Le dormeur doit se réveiller
Posté le 27-08-2002 à 10:17:23  profilanswer
 

non

n°202600
Joel F
Real men use unique_ptr
Posté le 27-08-2002 à 10:20:04  profilanswer
 

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

n°202602
LetoII
Le dormeur doit se réveiller
Posté le 27-08-2002 à 10:21:38  profilanswer
 

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

mood
Publicité
Posté le 27-08-2002 à 10:21:38  profilanswer
 

n°202604
Joel F
Real men use unique_ptr
Posté le 27-08-2002 à 10:23:30  profilanswer
 

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

n°202606
Lenoiche
Posté le 27-08-2002 à 10:30:11  profilanswer
 

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:

n°202609
Jar Jar
Intaigriste
Posté le 27-08-2002 à 10:35:55  profilanswer
 

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
n°202610
LetoII
Le dormeur doit se réveiller
Posté le 27-08-2002 à 10:38:21  profilanswer
 

Jar Jar a écrit a écrit :

Segmentation fault (core dumped).




 
Pas nécessairement

n°202611
kadreg
profil: Utilisateur
Posté le 27-08-2002 à 10:40:38  profilanswer
 

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 !
n°202614
Jar Jar
Intaigriste
Posté le 27-08-2002 à 10:45:40  profilanswer
 

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
n°202619
Lenoiche
Posté le 27-08-2002 à 10:49:15  profilanswer
 

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

n°202623
gilou
Modérateur
Modzilla
Posté le 27-08-2002 à 10:55:16  profilanswer
 

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é!  --
n°202625
Lenoiche
Posté le 27-08-2002 à 10:55:46  profilanswer
 

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

n°202628
BifaceMcLe​OD
The HighGlandeur
Posté le 27-08-2002 à 11:00:43  profilanswer
 

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.

n°202630
LetoII
Le dormeur doit se réveiller
Posté le 27-08-2002 à 11:00:56  profilanswer
 

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

n°202631
BifaceMcLe​OD
The HighGlandeur
Posté le 27-08-2002 à 11:01:21  profilanswer
 

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

n°202633
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 27-08-2002 à 11:01:54  profilanswer
 

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)
n°202634
LetoII
Le dormeur doit se réveiller
Posté le 27-08-2002 à 11:02:14  profilanswer
 

BifaceMcLeOD a écrit a écrit :

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




 
argh! :D

n°202641
Joel F
Real men use unique_ptr
Posté le 27-08-2002 à 11:04:45  profilanswer
 

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.

n°202647
Lenoiche
Posté le 27-08-2002 à 11:06:06  profilanswer
 

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

n°202650
Joel F
Real men use unique_ptr
Posté le 27-08-2002 à 11:06:56  profilanswer
 

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

n°202652
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 27-08-2002 à 11:09:26  profilanswer
 

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)
n°202653
Joel F
Real men use unique_ptr
Posté le 27-08-2002 à 11:09:52  profilanswer
 

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
n°202654
Lenoiche
Posté le 27-08-2002 à 11:10:00  profilanswer
 

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

n°202661
Lenoiche
Posté le 27-08-2002 à 11:13:53  profilanswer
 

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

n°202662
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 27-08-2002 à 11:13:58  profilanswer
 

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)
n°202664
Lenoiche
Posté le 27-08-2002 à 11:16:08  profilanswer
 

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:

n°202665
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 27-08-2002 à 11:16:40  profilanswer
 

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)
n°202667
Lenoiche
Posté le 27-08-2002 à 11:17:59  profilanswer
 

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

n°202670
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 27-08-2002 à 11:20:05  profilanswer
 

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)
n°202671
LetoII
Le dormeur doit se réveiller
Posté le 27-08-2002 à 11:20:28  profilanswer
 

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

n°202693
Lenoiche
Posté le 27-08-2002 à 11:33:39  profilanswer
 

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]

n°204344
Musaran
Cerveaulté
Posté le 29-08-2002 à 02:47:15  profilanswer
 

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
mood
Publicité
Posté le   profilanswer
 


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

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

 

Sujets relatifs
Problème pour insertion smileys dans texterea (mozilla + netscape)[rapport de stage] Problème de traduction
[tableaux] probleme facile en CAidez moi SVP : Probleme con avec SDL (Langage C multimedias) !
[ PHP ] Problème pour trouver la librairie GD ?Problème d'activation de boutons dans VB6.0
[MySQL] Problème avec une requête...[MySQL] Problème de performance avec un index
[vbs] Prôblème à la conpetit probleme pour charger mon doc xml
Plus de sujets relatifs à : un autre probleme se pose .......


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