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

  FORUM HardWare.fr
  Programmation

  [C] Pb de taille de chaine de caractère

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Pb de taille de chaine de caractère

n°91820
Heurft
OUatE ?
Posté le 22-01-2002 à 10:30:55  profilanswer
 

Voila mon problème :
 
J'ai un char nom[25] et mon boss m'a dit que si je saississait un nombre supérieur à 25 le nom serait alors tronqué. Donc j'ai réfléchit et je voulais vous demander si y avait pas moyen de mettre à jour la taille du tableau.  
 
Enfin c'est mon boss qui me demande ça, moi au début j'avais mis cha nom[1000000] et comme ça on était tranquille
 
Merci de vos réponses

mood
Publicité
Posté le 22-01-2002 à 10:30:55  profilanswer
 

n°91837
gaetan7
et mon cul, c'est du poulet?
Posté le 22-01-2002 à 11:17:31  profilanswer
 

je pense que tu devrais faire une allocation dynamique en utilisant malloc et free...

n°91878
Carbon_14
Posté le 22-01-2002 à 13:11:20  profilanswer
 

char nom[25] réserve 25 "cases" en mémoire, donc permet de stocker un nom de 24 caractères (plus le \0 terminal de fin de chaîne).
 
char nom[1000000], ça gâche la mémoire.
 
Si on connait la taille de ce qu'on veut y mettre, on peut faire
char *nom; // pointeur
nom = (char *)malloc(Volume + 1); // alloue de la mémoire en quantité suffisante, le +1 est pour le '\0' terminal.
si nom != NULL, on peut l'utiliser
nom[0] = '\0'; si on veut l'initialiser
 
 
quand fini d'exister, on fait un free(nom);  
Le pointeur existe toujours, mais il n'y a plus de mémoire associée.
 
En C++ (je débute), on peut faire
nom = new char[Volume + 1];  
 
 
puis  
delete nom; // pr libérer la mémoire

n°91904
kaz ander
Le médiateur :)
Posté le 22-01-2002 à 14:29:14  profilanswer
 

Juste pour preciser : attribuer plus de 25 caracteres (enfin 24 + null terminator) a un tableau de char de [25], c'est plus dangereux en C ou C++ qu'une simple chaine tronquee. En fait, ton char nom[25] te ramene un pointeur ( nom ) vers un tableau de 25 char. Si tu mets ds cette variable par exemple 30 char, tu vas avoir un depassement. Et le C ou le C++ ne controlent pas ca et pas consequent tu ecris par dessus des infos deja allouees (autres variables, etc).
 
Une des fautes les plsu frequentes et les plus dures a debugger parce que vas-t-en trouver qu'une variable ne contient pas les donnees qu'elle devrait avoir a cause du depassement d'un tableau :cry:  
 
Donc prudence !

n°91915
Carbon_14
Posté le 22-01-2002 à 14:45:15  profilanswer
 

J'avais oublié de préciser ce côté des choses, désolé.
 
On écrase les variables tranquillement installées en mémoire quand on écrit "hors de chez soi". C'est aussi pourquoi il est indispensable de prévoir le 0 terminal, car écrire 25 caractères dans une chaîne de 25 cases écrase la variable voisine avec le 26 ème caractère, le '\0'...
 
Les variables étant rangées en mémoire les unes à la suite des autres, et occupant l'espace correspondant à leur taille (int, pointeur, ..), on peut "facilement" faire des dégats si on est étourdi. :)


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

  [C] Pb de taille de chaine de caractère

 

Sujets relatifs
[PHP] Aide sur les chaine de charactere[PHP]Remplacement de caractere speciaux !
[C++] Pourquoi la taille de fichier sous Win9X et WinNt est différente[ C ] fonction pour recuperer le code ASCII d'un caractere HELP !!!
[PHP] Insérer une chaine au début d'un fichier (clareté inside!)[VBA] Comment extraire un caractere d'un chaine de type string.
JavaScript : Taille de documet et taille de fenêtreENCORE POUR MON STAGE : Comment couper une chaine en Cold Fusion
[Help] Caractère bizzare 
Plus de sujets relatifs à : [C] Pb de taille de chaine de caractère


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