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

  FORUM HardWare.fr
  Programmation

  [C] Pb chaines de caractères

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Pb chaines de caractères

n°11630
Evadream -​jbd-
Posté le 28-01-2001 à 17:04:02  profilanswer
 

Bon, vous moquez pas :) Voila ou ca couille :
 
 
//
printf("
--Votre article--

 

" );
   printf("nom : " );
   scanf(" %s",t[i].nom);
 
 
   printf("
prix : " );
   scanf(" %lf",&t[i].prix);
 
 
   printf("
reference : " );
   scanf(" %s",t[i].ref);
 
   t[i].existe=1;
//
 
c'est au sein d'une fonction que j'ai appele create_article qui prend un tableau d'article en parametre. article étant un typedef struct :
 
typedef struct
 {
   int existe;
   char *nom;
   double prix;
   int reste;
   char *ref;
        }article;
 
Donc ca merdouille au niveau des chaines de caractères ref et nom. Ma chaine de caractère nom se retrouve mixé avec la chaine de caractère ref, ce qui est embetant, ca fait 2/3 heures que je suis dessus, et je comprends pas, si une ame charitable passe par la :)), merci d'avance

 

--Message édité par Evadream -jbd---

mood
Publicité
Posté le 28-01-2001 à 17:04:02  profilanswer
 

n°11631
Evadream -​jbd-
Posté le 28-01-2001 à 17:13:35  profilanswer
 

Autre chose, le code qui apparait ici est celui situé juste apres un for qui s'arrete sur une valeur de i bien choisie.
 
Merci !

n°11634
krolours1
Posté le 28-01-2001 à 17:37:53  profilanswer
 

scanf(" %s",t[i].ref);ss
 
ref est déclaré en int, ça explique peut-être le pb

n°11635
Evadream -​jbd-
Posté le 28-01-2001 à 18:05:40  profilanswer
 

Ouaip, merci, mais c'était un mauvais copier coller, c'etait une ancinne version, je corrige ca ds le post
 
Merci qd meme !

n°11637
verdoux
And I'm still waiting
Posté le 28-01-2001 à 18:11:26  profilanswer
 

Ta structure n'a pas de place pour stocker un nom !
Donc quand tu rentres le nom ça deborde sur les "champs" suivants.

n°11638
Evadream -​jbd-
Posté le 28-01-2001 à 18:13:59  profilanswer
 

Ok, mais pourquoi elle a pas de place ? Pourtant j'initialise mes deux pointeurs ( à l'aide d'une fonction qui s'execute avant ) comme suit :
 
t[i].nom=(char*)malloc(sizeof(char));
t[i].ref=(char*)malloc(sizeof(char));
 
Comment donner plus de place pour stocker "nom" ?
 
Merci du temps que vous m'accordez tous

n°11640
verdoux
And I'm still waiting
Posté le 28-01-2001 à 18:20:35  profilanswer
 

Ben tu mets:
char nom[9] si tu veux mettre une chaîne de 8 caractères (+'';) au max.
 
En fait le mieux est de faire le scanf sur une chaine temporaire, verifier si la taille est < 9 puis la copier dans t[i].nom.

n°11641
Evadream -​jbd-
Posté le 28-01-2001 à 18:23:42  profilanswer
 

Ok, merci ! Mais je pensais qu'on pouvait ne pas se soucier de la taille d'une chaine de caractere avec une declaration du type
char *chaine_de_caracteres
 
Donc la, apparement, il s'agit d'un probleme de débordement, tout simplement ?
 
Y'a moyen de savoir jusqu'ou on peut aller avec cette limite, ou est-ce purement aleatoire ?

 

--Message édité par Evadream -jbd---

n°11643
Evadream -​jbd-
Posté le 28-01-2001 à 18:30:34  profilanswer
 

Et sinon, d'une manière générale, une déclaration du type char *qqchose est à éviter pour manier des chaines de caractères ?

n°11647
Evadream -​jbd-
Posté le 28-01-2001 à 18:48:27  profilanswer
 

Hum :D
 
j'ai change ma struture :
 
typedef structss
{ss
ss int existe;ss
ss char nom[10];ss
ss double prix;ss
ss int reste;ss
ss char ref[10];ss
ssssssss}article
 
et lorsque je veux "inititaliser" mon tableau de structure article :
 
t[i].nom="0";
 
par exemple, le compilo me dit qu'il attend une lvalue. Mais je ne comprends pas. Mettons que i ( qui a une valeur à la sortie d'une boucle ) vaut 5.
 
Je veux qu'à la cinquieme case de mon tableau d'article, le champ nom soit affecté par le caractère "0".
 
t[i].nom ne désigine t'il pas le champ nom de la structure se situant à la 5eme case du tableau ?
 
Si oui, je ne vois pas pourquoi t[i].nom="0", bloque.
 
Si qqun pouvrait m'expliquer..

mood
Publicité
Posté le 28-01-2001 à 18:48:27  profilanswer
 

n°11650
verdoux
And I'm still waiting
Posté le 28-01-2001 à 18:53:39  profilanswer
 

Pour pouvoir faire t[i].nom = "0", il faut que nom soit un char* :D
 
Sinon, il faut faire strcpy(t[i].nom,"0" )

 

--Message édité par Verdoux--

n°11652
Evadream -​jbd-
Posté le 28-01-2001 à 18:55:45  profilanswer
 

hum, j'ai pas le droit d'utiliser string.h :( Je sais, c débile, obliger de réinventer la roue à chaque fois... )

 

--Message édité par Evadream -jbd---

n°11654
verdoux
And I'm still waiting
Posté le 28-01-2001 à 19:01:53  profilanswer
 

Tu peux alors toujours l'initialiser avec:
t[i].nom[0]='0';
t[i].nom[1]='/0';

 

--Message édité par Verdoux--

n°11663
Oggy_le_ca​ffard
Posté le 28-01-2001 à 19:51:42  profilanswer
 

houla la gaffe monstrueuse !
 
t[i].nom=(char*)malloc(sizeof(char));
 
la t aloue juste une char soit un octet !!!!!!!!!
(sizeof(char) va te renvoyer 1 )ss
 
la syntaxe correcte est :
 
t[i].nom=(char*)malloc(k*sizeof(char));
où k est le nombre de char que tu veux allouer (20 par exemple)
 
ou ta appris a programmer toi ? ;)

n°11664
Oggy_le_ca​ffard
Posté le 28-01-2001 à 19:54:45  profilanswer
 

et o fait Verdoux -> c pluto :
t[i].nom[0] = '' ou équivalent t[i].nom[0] = 0
 
A+

n°11668
verdoux
And I'm still waiting
Posté le 28-01-2001 à 20:02:45  profilanswer
 

A vi j'ai mollé le \

n°11692
Evadream -​jbd-
Posté le 28-01-2001 à 21:05:45  profilanswer
 

Oggy_le_caffard, j'ai le même pb en allouant de la mémoire pour 20 caractères

n°11693
Roswell_
Posté le 28-01-2001 à 21:06:08  profilanswer
 

c'est plus souple d'utilise les char * en utilisant un tampon!
Exemple:
 
char * getstring(char *buffer)
{   char *e;
 e=(char *)malloc((1+strlen(buffer))*sizeof(char));
 strncpy(e,buffer,1+strlen(buffer));
 return(e);
}
main()
{
 char* nom;
 char* tampon=(char*)malloc(1024*sizeof(char));//ou char tampon[1024];
 
 printf("
 nom:" );
 scanf("%s",tampon);
 nom=getString(tampon);
}

 

--Message édité par Roswell_--


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

  [C] Pb chaines de caractères

 

Sujets relatifs
Plus de sujets relatifs à : [C] Pb chaines de caractères


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)