- Prob avec strcat() [résolu] [C] - C++ - Programmation
Marsh Posté le 02-10-2002 à 14:25:30
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 :
|
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( ....
Marsh Posté le 02-10-2002 à 14:28:12
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
Marsh Posté le 02-10-2002 à 14:29:15
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.
Marsh Posté le 02-10-2002 à 14:30:54
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à ?
Marsh Posté le 02-10-2002 à 14:33:14
yep
Error: PROJET_LIB.H(77,46):Cannot convert 'int' to 'const char *'
Marsh Posté le 02-10-2002 à 14:34:24
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.
Marsh Posté le 02-10-2002 à 14:35:12
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 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...
Marsh Posté le 02-10-2002 à 14:38:41
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 :
|
#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
Marsh Posté le 02-10-2002 à 14:44:31
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)
Marsh Posté le 02-10-2002 à 14:47:41
Ok merci a tous .
Je v essayer de me démerder avec tout ca merci.
Marsh Posté le 02-10-2002 à 14:50:06
ANTP a raison : ligne_lue[iLigneLue] est un caractère et non une chaîne !
Ce que tu peux faire :
Code :
|
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
Marsh Posté le 02-10-2002 à 15:09:08
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
Marsh Posté le 02-10-2002 à 15:12:29
si tu veux juste un caractère tu dois pas utiliser strcat, mais strncat et passer 1 comme dernier paramètre
Marsh Posté le 02-10-2002 à 15:13:09
tu peux aussi faire:
p = strlen(mot);
mot[p] = ligne_lue[ilignelue];
mot[p+1] = 0;
Marsh Posté le 02-10-2002 à 15:13:29
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.
Marsh Posté le 02-10-2002 à 15:23:12
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 :
|
tut, c'est moi qui l'est vu le premier , 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
Marsh Posté le 02-10-2002 à 15:26:06
barbarella a écrit a écrit : tut, c'est moi qui l'est vu le premier , 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
Marsh Posté le 02-10-2002 à 15:35:17
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
Marsh Posté le 02-10-2002 à 15:49:30
ok merci
mais dans un premier temps je ferai avec ca
tkx a+
Marsh Posté le 02-10-2002 à 14:18:15
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 :
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.