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

  FORUM HardWare.fr
  Programmation
  C++

  [C] - Prob avec strcat() [résolu]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] - Prob avec strcat() [résolu]

n°222732
Schtroumph​eur
bwwwwwaaaaarkkkkkkk!!!!!!
Posté le 02-10-2002 à 14:18:15  profilanswer
 

Bonjour, voila a partir d'un fichier je veux reconstituer un mot caractere par caractere mais voila ce qu'il me dit quand j'essaie de concatener avec la fonction strcat :  
 
 

Code :
  1. char ligne_lue[150]; //Ligne lue dans le fichier data.txt
  2. char mot[50];
  3. int iLigneLue=0; //Indice de parcour de la ligne lue
  4. .
  5. .
  6. .
  7. mot=strcat(mot, ligne_lue[iLigneLue]);


 
Et il me sort : Error:  PROJET_LIB.H(77,46):Cannot convert 'int' to 'const char *'
 
je veux bien que l'indice est en entier mais je concatene le contenu donc c'est pas un entier !! comrpend pas :( HELP  
 
P.S.: j'ai essayé de rechercher des posts sur le forum mais la recherche bloque... pour vous aussi?
 
A+ merci


Message édité par Schtroumpheur le 02-10-2002 à 15:49:53

---------------
J'ai une pierre à la place du coeur, et au milieu de cette pierre il y a un coeur.
mood
Publicité
Posté le 02-10-2002 à 14:18:15  profilanswer
 

n°222736
barbarella
Posté le 02-10-2002 à 14:25:30  profilanswer
 

Schtroumpheur a écrit a écrit :

Bonjour, voila a partir d'un fichier je veux reconstituer un mot caractere par caractere mais voila ce qu'il me dit quand j'essaie de concatener avec la fonction strcat :  
 
 

Code :
  1. char ligne_lue[150]; //Ligne lue dans le fichier data.txt
  2. char mot[50];
  3. int iLigneLue=0; //Indice de parcour de la ligne lue
  4. .
  5. .
  6. .
  7. mot=strcat(mot, ligne_lue[iLigneLue]);


 
Et il me sort : Error:  PROJET_LIB.H(77,46):Cannot convert 'int' to 'const char *'
 
je veux bien que l'indice est en entier mais je concatene le contenu donc c'est pas un entier !! comrpend pas :( HELP  
 
P.S.: j'ai essayé de rechercher des posts sur le forum mais la recherche bloque... pour vous aussi?
 
A+ merci




 
salut,
 
au pif essaie avec un char *mot au lieu de mot[50], mais j'avoue que là je ne vois pas l'interet de faire un mot = strcat( ....


Message édité par barbarella le 02-10-2002 à 14:26:53
n°222737
Schtroumph​eur
bwwwwwaaaaarkkkkkkk!!!!!!
Posté le 02-10-2002 à 14:28:12  profilanswer
 

pour le mot=... ben je savais pas si je devais mettre ca ou non, j'ai jamais utilisé cette fonction ...  
Je vais essayer ta soluce. merci


---------------
J'ai une pierre à la place du coeur, et au milieu de cette pierre il y a un coeur.
n°222739
Schtroumph​eur
bwwwwwaaaaarkkkkkkk!!!!!!
Posté le 02-10-2002 à 14:29:15  profilanswer
 

il me dit pareil ! :(
 
je crois que c'est a cause du tableau indicé :/ mais je sais pas du tout comment faire pour que ca marche.


---------------
J'ai une pierre à la place du coeur, et au milieu de cette pierre il y a un coeur.
n°222740
barbarella
Posté le 02-10-2002 à 14:30:54  profilanswer
 

Schtroumpheur a écrit a écrit :

il me dit pareil ! :(
 
je crois que c'est a cause du tableau indicé :/ mais je sais pas du tout comment faire pour que ca marche.




 
en faisant un char *mot, il te dit pareil ? t'es sur là ?

n°222741
Schtroumph​eur
bwwwwwaaaaarkkkkkkk!!!!!!
Posté le 02-10-2002 à 14:33:14  profilanswer
 

yep :/
 
Error:  PROJET_LIB.H(77,46):Cannot convert 'int' to 'const char *'
 


---------------
J'ai une pierre à la place du coeur, et au milieu de cette pierre il y a un coeur.
n°222742
barbarella
Posté le 02-10-2002 à 14:34:24  profilanswer
 

Schtroumpheur a écrit a écrit :

il me dit pareil ! :(
 
je crois que c'est a cause du tableau indicé :/ mais je sais pas du tout comment faire pour que ca marche.




 
ok, j'ai vu l'erreur dans ton prob. c'est le ligne_lue[iLigneLue] il ne correspond pas a une adresse.
 

n°222744
antp
Super Administrateur
Champion des excuses bidons
Posté le 02-10-2002 à 14:35:12  profilanswer
 

ligne_lue[iLigneLue]
 
-> caractère à la position "ilignelue" dans la chaine ligne_lue
 
un caractère c'est un octet
le type le plus proche pour lui est peut-être l'entier
ici il te demande un pointeur sur une chaine
 
donc:
&ligne_lue[iLigneLue]
 
pour donner l'adresse du caractère
 
ça c'est pour le problème de compil
reste que le ilignelue est bizarre :heink: je vois pas à quoi il sert
puis c'est dangereux : tu concatènes à une chaine de max 50 caractères une chaine qui en fait max 150 ! tu risques de vite dépasser les 50 caractères...


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°222747
nicolasm
Posté le 02-10-2002 à 14:38:41  profilanswer
 

Schtroumpheur a écrit a écrit :

Bonjour, voila a partir d'un fichier je veux reconstituer un mot caractere par caractere mais voila ce qu'il me dit quand j'essaie de concatener avec la fonction strcat :  
 
 

Code :
  1. char ligne_lue[150]; //Ligne lue dans le fichier data.txt
  2. char mot[50];
  3. int iLigneLue=0; //Indice de parcour de la ligne lue
  4. mot=strcat(mot, ligne_lue[iLigneLue]);


 
 




 
#include <string.h> /* a ajouter */
 
strcpy(mot,strncat(mot,ligne_lue,strlen(mot)+strlen(ligne_lue)));
/* la tu copie correctement le retour de la chaine concatenee !! */
et mets plutot mot plus grand que 150 car tu concatenes donc rajoute des chars


Message édité par nicolasm le 02-10-2002 à 14:40:07
n°222751
antp
Super Administrateur
Champion des excuses bidons
Posté le 02-10-2002 à 14:44:31  profilanswer
 

nicolasm a écrit a écrit :

 
 
#include <string.h> /* a ajouter */
 
strcpy(mot,strncat(mot,ligne_lue,strlen(mot)+strlen(ligne_lue)));
/* la tu copie correctement le retour de la chaine concatenee !! */
et mets plutot mot plus grand que 150 car tu concatenes donc rajoute des chars




 
c'est quoi ce brol ?  
   char a[50] = "a", b[50] = "b";
   strcat(a, b);
-> a vaut "ab" pas besoin de recopier le résultat, strcat modifie la variable que tu lui passe (et d'ailleurs il te renvoie un pointeur vers la variable de destination, pointeur inutile dans la majorité des cas)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
mood
Publicité
Posté le 02-10-2002 à 14:44:31  profilanswer
 

n°222752
Schtroumph​eur
bwwwwwaaaaarkkkkkkk!!!!!!
Posté le 02-10-2002 à 14:47:41  profilanswer
 

Ok merci a tous .
 
Je v essayer de me démerder avec tout ca merci.


---------------
J'ai une pierre à la place du coeur, et au milieu de cette pierre il y a un coeur.
n°222755
bb138
La vie est belle ...
Posté le 02-10-2002 à 14:50:06  profilanswer
 

ANTP a raison : ligne_lue[iLigneLue] est un caractère et non une chaîne !
Ce que tu peux faire :

Code :
  1. char **ligne_lue;
  2. register int i;
  3. ligne_lue = (char **) malloc(nb_ligne * sizeof(char *));
  4. for (i = 0; i < nb_ligne; i++)
  5. {
  6. ligne_lue[i] = (char *) malloc(150 * sizeof(char));
  7. }


Bien entendu, je suppose que tu veux un tableau contenant des chaines de caractères, que tu connait ce nombre (nb_ligne). Et du coup, il vaut mieux fair attention à la longueur de ton mot[50] qui risque d'être un peu trop petit comme te l'a signalé ANTP

n°222760
Schtroumph​eur
bwwwwwaaaaarkkkkkkk!!!!!!
Posté le 02-10-2002 à 15:09:08  profilanswer
 

antp a écrit a écrit :

 
 
c'est quoi ce brol ?  
   char a[50] = "a", b[50] = "b";
   strcat(a, b);
-> a vaut "ab" pas besoin de recopier le résultat, strcat modifie la variable que tu lui passe (et d'ailleurs il te renvoie un pointeur vers la variable de destination, pointeur inutile dans la majorité des cas)




 
J'ai fais comme tu as dis + ou - et ca marche, mais a moitier
 
strcat(LC_pCourant->nom, &ligne_lue[iLigneLue]);
 
en fait il me concatene bien mais le prob c'est que c'est pas le caractere a la position iLigneLue, mais tout les caracteres a partir de cette position, ce qui est logique vu qu'on lui donne l'adresse de ce caractere, comment faire pour eviter ca?  
 
Merci


Message édité par Schtroumpheur le 02-10-2002 à 15:09:51

---------------
J'ai une pierre à la place du coeur, et au milieu de cette pierre il y a un coeur.
n°222761
antp
Super Administrateur
Champion des excuses bidons
Posté le 02-10-2002 à 15:12:29  profilanswer
 

si tu veux juste un caractère tu dois pas utiliser strcat, mais strncat et passer 1 comme dernier paramètre


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°222762
antp
Super Administrateur
Champion des excuses bidons
Posté le 02-10-2002 à 15:13:09  profilanswer
 

tu peux aussi faire:
 
p = strlen(mot);
mot[p] = ligne_lue[ilignelue];
mot[p+1] = 0;


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°222763
Schtroumph​eur
bwwwwwaaaaarkkkkkkk!!!!!!
Posté le 02-10-2002 à 15:13:29  profilanswer
 

antp a écrit a écrit :

si tu veux juste un caractère tu dois pas utiliser strcat, mais strncat et passer 1 comme dernier paramètre
 




 
ha ca sert a ca strncat, merci bien.


---------------
J'ai une pierre à la place du coeur, et au milieu de cette pierre il y a un coeur.
n°222768
barbarella
Posté le 02-10-2002 à 15:23:12  profilanswer
 

BB138 a écrit a écrit :

ANTP a raison : ligne_lue[iLigneLue] est un caractère et non une chaîne !
Ce que tu peux faire :

Code :
  1. char **ligne_lue;
  2. register int i;
  3. ligne_lue = (char **) malloc(nb_ligne * sizeof(char *));
  4. for (i = 0; i < nb_ligne; i++)
  5. {
  6. ligne_lue[i] = (char *) malloc(150 * sizeof(char));
  7. }


Bien entendu, je suppose que tu veux un tableau contenant des chaines de caractères, que tu connait ce nombre (nb_ligne). Et du coup, il vaut mieux fair attention à la longueur de ton mot[50] qui risque d'être un peu trop petit comme te l'a signalé ANTP
 




 
tut, c'est moi qui l'est vu le premier :D, bon treffle de plaisanterie,  
 
p = strlen(mot);  
mot[p] = ligne_lue[ilignelue];  
mot[p+1] = 0;
 
la solution de Antp est la plus adéquate, car de toute manière strcat ou strncat, ce n'est pas très performant :(

n°222769
Schtroumph​eur
bwwwwwaaaaarkkkkkkk!!!!!!
Posté le 02-10-2002 à 15:26:06  profilanswer
 

barbarella a écrit a écrit :

 
 
tut, c'est moi qui l'est vu le premier :D, bon treffle de plaisanterie,  
 
p = strlen(mot);  
mot[p] = ligne_lue[ilignelue];  
mot[p+1] = 0;
 
la solution de Antp est la plus adéquate, car de toute manière strcat ou strncat, ce n'est pas très performant :(




Salut j'ai fais comme antp m'as dit la ca fonctionne nickel ;)
En quoi strncat n'est pas performant? Lenteur d'execution?  
Merci


---------------
J'ai une pierre à la place du coeur, et au milieu de cette pierre il y a un coeur.
n°222774
barbarella
Posté le 02-10-2002 à 15:35:17  profilanswer
 

Schtroumpheur a écrit a écrit :

 
Salut j'ai fais comme antp m'as dit la ca fonctionne nickel ;)
En quoi strncat n'est pas performant? Lenteur d'execution?  
Merci




 
oui, dans le cadre d'une optimisation de prog, il est souhaitable d'éviter strcat

n°222777
Schtroumph​eur
bwwwwwaaaaarkkkkkkk!!!!!!
Posté le 02-10-2002 à 15:49:30  profilanswer
 

ok merci
 
mais dans un premier temps je ferai avec ca  
 
tkx a+


---------------
J'ai une pierre à la place du coeur, et au milieu de cette pierre il y a un coeur.

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

  [C] - Prob avec strcat() [résolu]

 

Sujets relatifs
[C] declaration d'une fonction qui retourne une adr en mem. [resolu][resolu] IMPRIMER AVEC WORDPAD
prob avec Time[Win32] [RESOLU] Recuperer la liste des processus
Erreur de variable !!??!!?? [résolu]Grosse erreur de ouf sur les sessions !!!!! [Résolu]
Selectionner un item d'une liste d'une form [Resolu][resolu] couleur+fichier+rtf
prob upload...PCRE en javascript ? [Résolu]
Plus de sujets relatifs à : [C] - Prob avec strcat() [résolu]


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