Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Problème avec taille chaine de caractères variable [ Archives / Au secours ] (graphtyrael)

mercredi 2 février 2005 à 11:37:45 | Problème avec taille chaine de caractères variable

graphtyrael

Bonjour à tous !

Je cherche à créer une chaine de caractère de taille variable qui s'agrandit au fur et à mesure que je rentre des caractères. J'ai donc fait un code ressemblant à ça :

char *frappe;
char *texte;
char *buffer;

texte = (char *) malloc (sizeof(char));
frappe = (char *) malloc(sizeof(char));

*frappe = 0;

while(*frappe != 27) //Tant que l'on ne presse pas echap
{
 
    *frappe = getch(); /*je capture le caractere saisi et le stock dans *frappe*/

    buffer = (char *) malloc (strlen(texte)*sizeof(char)); /*j'alloue à buffer la même taille que pour "texte"*/

    strcpy(buffer,texte); //je copie texte dans buffer

    free(texte);  //je libère texte

    texte = (char *) malloc (strlen(buffer)+1*sizeof(char));  
/*j'alloue la taille de buffer (l'ancienne taille de texte) + 1 pour stocker le nouveau caractère*/

    strcpy(texte,buffer);  /*je copie l'ancien texte du buffer dans texte*/

    strcat(texte,frappe);  //j'ajoute le nouveau caractère.
 
     free(buffer);  //je libère buffer.
}



Et après bonne compilation, il se produit toutes sortes de bizarerries : la taille de buffer s'initialise à 3 alors qu'il n'y a rien dedans, l'affichage de la chaine produit des caractères bizarres toujour au même endroit, et au bout d'un certain nombre de frappes (toujours le meme ici aussi) le programme quitte sans prévenir et sans afficher d'erreur non plus.

Je ne sais plus trop quoi faire... j'ai essayé différentes méthodes d'allocation de mémoire mais toujours les mêmes problèmes.

Pour précision, c'est un bout de code qui servira (peut etre) au développement d'un pseudo-traitement de texte en mode console sous windows (donc pas possible de définir une taille maximale par défaut). Je développe sous DEV-C++.

Je ne pense pas être le seul à qui ce problème est arrivé.. Si quelqu'un pouvait m'aider je lui en serait très reconnaissant!  


@pluch

- Graph Tyrael -


mercredi 2 février 2005 à 12:25:30 | Re : Problème avec taille chaine de caractères variable

ymca2003

Plusiereures chose :
- en C les chaînes de carctères sont terminées par un carctères nul de fin, il ne faut donc pas oublier de l'allouer (pas compris dans le strlen)
- pour réallouer une chaîne, il y a la fonction realloc.
- tu ne termine pas des châines de caractères.
voici une version simplifiée de ce que tu veut faire :

// alocation initiale
int length = 0;
char* text = malloc(lenght+1);
text[0] = '\0';
while(1)
{
// récupération caractère
char c = getch();
if(c == 27)
break;

// on stocke le caractère (à la place du nul de l'ancienne string)
text[length] = c;

// augmentation de la taille, ajout nul final
length++;
text = realloc(text, length+1);
text[length] = '\0';
}

mercredi 2 février 2005 à 12:26:35 | Re : Problème avec taille chaine de caractères variable

ymca2003

J'ai oublié le free(text) à la fin.


mercredi 2 février 2005 à 12:31:04 | Re : Problème avec taille chaine de caractères variable

graphtyrael

J'ai compris !

Parcontre... la fonction realloc() ne réinitialise t elle pas texte? Est ce que le contenu de texte sera conservé lor de la réallocation?

Merci pour ta réponse !

mercredi 2 février 2005 à 12:32:45 | Re : Problème avec taille chaine de caractères variable

ymca2003

Réponse acceptée !
c'est le but de realloc, s'il y a de la place à la fin de la première allocation seule la structure interne de l'allocation est modifiée, sinon elle prend un autre endroit de la mémoire pour y recopier la chaîne.

mercredi 2 février 2005 à 12:34:03 | Re : Problème avec taille chaine de caractères variable

graphtyrael

Merci beaucoup à toi !!!




Cette discussion est classé dans : buffer, taille, texte, char, frappe


Répondre à ce message

Sujets en rapport avec ce message

buffer pour editeur de texte [ par dyroj ] hello all, je voudrai créer un editeur de texte, et pour cela j'ai besoin d'un buffer(une variable char) qui contiendra toute la taille du fichier(qui !!! Pb d'allocation mémoire !!! [ par yoyo269 ] Bonjour à tous !Comme le titre l'indique, j'ai un petit souci avec l'allocation de mémoire.En fait j'ai un char*, auquel j'applique un malloc. Ensuite Pb Fin de transmission recv [ par makmibad ] Voila, il y a quelque chose que je ne comprends pas :La fonction recv devient bloquante ds certain cas et pas d'autres ; je m'explique :Si j'envoie ca char* dans un destructeur [ par pepsidrinker ] Premierement, merci de lire ce post, et merci a tous ceux qui veulent maider. Jai le probleme suivant: Jassigne des char* avec 'new[]' dans le constru Malloc et mémoire affectée [ par Chop_chop ] Bonjour,J'ai un petit soucis quant à l'allocation de mémoire pour un char* avec l'utilisation de malloc.Voici mon code (bien allégé) :[CODE] char *fic analyseur lexical pascal [ par perrotta ] Bonjour, dsl pour ma langue je parle pas bien le français; je suis entrin de devlopper un analyseur lexical pour un programme (pascal) prèci ,et j'ai Taille de la Police [ par victorcoasne ] Bonjour,Je veux écrire sur une image un texte.Je me sert de la librairie GD.J'ai par exemple un carré de 50px sur 100px et je veux écrire un texte ("L copier le contenu d'un fichier dans Cstring [ par msahli3 ] bonjour , je doit modifier un programme (fait auparavant en MFC ou je ne suis pas forcément trés bon) je doit importer un fichier texte et le parsser couleur d'un texte dans un buffer [ par dams6478 ] bonjour, voila je voudrai modifier la couleur d'un texte que j'insere dans un buffer texte voila la commande que j'utilise pour inserrer ce texte: gt Probléme pour lire le buffer au lancement de la connexion [ par logant83 ] Bonsoir, voila enfaite j'ai établi une connexion sur un server irc grace au socket mais quand je recois sur le buffer les différente informations (Ell


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,250 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.