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

  FORUM HardWare.fr
  Programmation
  C

  Problème avec la taille d'un tableau [résolu]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème avec la taille d'un tableau [résolu]

n°917575
Evolvox
Toujours y croire, toujours...
Posté le 07-12-2004 à 23:06:34  profilanswer
 

Hello tout le monde !
 
D'après ce que j'ai compris, un tableau doit avoir une taille bien définie si on veut pouvoir espérer le compiler (j'ai entendu parler d'allocations dynmaiques et autre joyeusetés, mais j'en suis pas encore là). Donc au début de mon code (après les includes) j'ai :
 

Code :
  1. const int longueur_max = 100;


 
puis dans ma main je déclare une chaîne :
 

Code :
  1. char mot[longueur_max] = "programmation";


 
Malheureusement quand je tente de compiler j'ai ceci :
 

variable-sized object may not be initialized


 
mais si je fais  
 

Code :
  1. char mot[100] = "programmation";


 
Pas de problèmes à la compile ! :heink: Je pige pas trop... merci de votre aide !


Message édité par Evolvox le 08-12-2004 à 19:35:03

---------------
gaymer's est la personne la plus formidable jamais rencontrée dans toute ma vie, je lui achèterais un makato et au moins les 4 news pourries quotidiennes qui vont avec
mood
Publicité
Posté le 07-12-2004 à 23:06:34  profilanswer
 

n°917639
Taz
bisounours-codeur
Posté le 08-12-2004 à 00:38:10  profilanswer
 

"const" ne signifie pas "constante" mais "ne peut être réaffecter par la suite". Un tableau étant constuit par un type et une expression constante, ton compilateur a donc raison

n°917978
chrisbk
-
Posté le 08-12-2004 à 14:44:42  profilanswer
 

Taz a écrit :

"const" ne signifie pas "constante" mais "ne peut être réaffecter par la suite". Un tableau étant constuit par un type et une expression constante, ton compilateur a donc raison


 
rien a voir, mais la au taf on a un gcc 2.96 (on fait du c90). Si on update y'a risque de pb d'apres toi ? (truc qui compile pu, ce genre de gag)

n°918002
spokup
Posté le 08-12-2004 à 15:10:15  profilanswer
 

si tu veut définir une vraie constante fait une macro  
 
#define POUET 100
 
et tout sera remplacé par le préprocesseur

n°918009
Lam's
Profil: bas.
Posté le 08-12-2004 à 15:22:04  profilanswer
 

Ouais, enfin y a plus simple, hein.  
  const char * tab = "programmation";
 
  const char tab[] = "programmation";
 
Ou même si ça t'amuse (en C99 uniquement, avec les VLA):
  char tab[taille];
  strncpy(tab, "programmation", sizeof (tab));

n°918050
push
/dev/random
Posté le 08-12-2004 à 15:57:05  profilanswer
 

Lam's> pq en C99 uniquement ?

n°918081
Lam's
Profil: bas.
Posté le 08-12-2004 à 16:32:45  profilanswer
 

push a écrit :

Lam's> pq en C99 uniquement ?


Si taille n'est pas une constante, alors la taille du tableau n'est pas connue à la compilation, et le C90 (le C Ansi) ne l'accepte pas.  
 
Par contre, le C99 autorise la création de Variable-Length Arrays, dont la taille n'est connue qu'à l'exécution. Dans mon pseudo-bout de code, taille était une variable.  

n°918089
Taz
bisounours-codeur
Posté le 08-12-2004 à 16:42:08  profilanswer
 

chrisbk a écrit :

rien a voir, mais la au taf on a un gcc 2.96 (on fait du c90). Si on update y'a risque de pb d'apres toi ? (truc qui compile pu, ce genre de gag)

non, je pense pas. Mais tu devrais d'abord t'assurer que ton fonctionne bien avec quelque chose genre -std=gnu89 .
Après si c'est propre, ça devrait très bien passé. Les seuls trucs qui vont chier, c'est les trucs de type-punning sur les pointeurs et les cast de l-values, mais normalement, dans du code propre, on en trouve pas.

n°918254
Evolvox
Toujours y croire, toujours...
Posté le 08-12-2004 à 19:34:38  profilanswer
 

Taz a écrit :

"const" ne signifie pas "constante" mais "ne peut être réaffecter par la suite". Un tableau étant constuit par un type et une expression constante, ton compilateur a donc raison


 
Mais je n'ai pas mis la faute une seule seconde sur le copilateur. :D
 
Merci pour vos réponses  :)  


---------------
gaymer's est la personne la plus formidable jamais rencontrée dans toute ma vie, je lui achèterais un makato et au moins les 4 news pourries quotidiennes qui vont avec
n°918321
Emmanuel D​elahaye
C is a sharp tool
Posté le 08-12-2004 à 21:16:57  profilanswer
 

Evolvox a écrit :

D'après ce que j'ai compris, un tableau doit avoir une taille bien définie si on veut pouvoir espérer le compiler (j'ai entendu parler d'allocations dynmaiques et autre joyeusetés, mais j'en suis pas encore là). Donc au début de mon code (après les includes) j'ai :
 

Code :
  1. const int longueur_max = 100;


 
puis dans ma main je déclare une chaîne :
 

Code :
  1. char mot[longueur_max] = "programmation";


 
Malheureusement quand je tente de compiler j'ai ceci :
 

variable-sized object may not be initialized




C'est normal. En C90 (le C le plus en vogue), l'expression qui est entre les crochets doit être une 'expression constante', c'est à dire une valeur numérique valide, une macro représentant une valeur numérique valide ou un enum. Le code que tu proposes est appelé 'VLA' (Variable Length Array) et n'est disponible (en théorie) que sur les compilateur à la norme C99. (rare, mais c'est le cas de gcc 3.x si on utilise les bons flags)

Citation :


mais si je fais  
 

Code :
  1. char mot[100] = "programmation";


 
Pas de problèmes à la compile !


C'est normal, '100' est une 'expression constante', et ton compilateur (probabement C90) avale ça sans problèmes.


---------------
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 08-12-2004 à 21:16:57  profilanswer
 

n°918443
matafan
Posté le 08-12-2004 à 23:06:43  profilanswer
 

N'empeche qu'avec un const int dont la valeur est definie a la declaration, le compilo a toutes les infos dont il a besoin pour reserver le tableau. Il n'y a pas de raison technique qui l'empeche de le faire.

n°918446
Emmanuel D​elahaye
C is a sharp tool
Posté le 08-12-2004 à 23:09:24  profilanswer
 

matafan a écrit :

N'empeche qu'avec un const int dont la valeur est definie a la declaration, le compilo a toutes les infos dont il a besoin pour reserver le tableau. Il n'y a pas de raison technique qui l'empeche de le faire.


Oui, c'est une extension connue de gcc...


Message édité par Emmanuel Delahaye le 08-12-2004 à 23:09:34

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

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

  Problème avec la taille d'un tableau [résolu]

 

Sujets relatifs
[OpenGL] Problême avec glDrawPixelsEcore et toujours ces fameux tableau
Probleme de concatenationpetit probleme avec une JApplet
[RESOLU]Entrées multiples pourquoi??débutant en VBA (petit probléme)
ASP CDO ....PROBLEME DE RETURN PATHcryptage md5[resolu]
probleme ecriture fichier[HTML/CSS] Problème taille police dans tableau sous IE [RESOLU]
Plus de sujets relatifs à : Problème avec la taille d'un tableau [résolu]


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