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

 


Dernière réponse
Sujet : [C] Pb chaines de caractères
Roswell_ 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_--


Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
Roswell_ 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_--

Evadream -jbd- Oggy_le_caffard, j'ai le même pb en allouant de la mémoire pour 20 caractères
verdoux A vi j'ai mollé le \
Oggy_le_caffard et o fait Verdoux -> c pluto :
t[i].nom[0] = '' ou équivalent t[i].nom[0] = 0
 
A+
Oggy_le_caffard 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 ? ;)
verdoux Tu peux alors toujours l'initialiser avec:
t[i].nom[0]='0';
t[i].nom[1]='/0';

 

--Message édité par Verdoux--

Evadream -jbd- 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---

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

Evadream -jbd- 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..
Evadream -jbd- 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 ?
Evadream -jbd- 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---

verdoux 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.
Evadream -jbd- 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
verdoux Ta structure n'a pas de place pour stocker un nom !
Donc quand tu rentres le nom ça deborde sur les "champs" suivants.
Evadream -jbd- Ouaip, merci, mais c'était un mauvais copier coller, c'etait une ancinne version, je corrige ca ds le post
 
Merci qd meme !
krolours1 scanf(" %s",t[i].ref);ss
 
ref est déclaré en int, ça explique peut-être le pb
Evadream -jbd- 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 !
Evadream -jbd- 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---


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