Probleme avec strcat
ojou
Messages postés
58
Date d'inscription
Statut
Membre
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
Je viens de debuter en C (c'est pour mon stage) et j'ai une erreur de syntaxe avec la commande strcat:
je veux mettre dans requete la valeur d'une chaine de caractères:
strcat (requete, "variable = %s", ma_chaine);
Mais il me dit qu'il y a trop de paramètres... je ne trouve pas la syntaxe exact, si vous la connaissez...
MERCI
Je viens de debuter en C (c'est pour mon stage) et j'ai une erreur de syntaxe avec la commande strcat:
je veux mettre dans requete la valeur d'une chaine de caractères:
strcat (requete, "variable = %s", ma_chaine);
Mais il me dit qu'il y a trop de paramètres... je ne trouve pas la syntaxe exact, si vous la connaissez...
MERCI
15 réponses
-
salut
tiens regarde par ici
http://www.cplusplus.com/ref/cstring/strcat.html
c'est donc char * strcat ( char * dest, const char * src );
il faut faire attention, ce n'est pas comme avec printf où tu peux faire %s !
merci google. -
oui : strtok
voici un exemple chpé sur le net :
#include <stdio.h> #include <string.h> int main() { char ligne[] = "ls | tee /dev/tty > toto"; char sep[] ="|>"; char *ptr; ptr = strtok(ligne, sep); while ( ptr != NULL ) { printf("token: %s\n", ptr); ptr = strtok(NULL, sep); } printf("ligne après traitement: %s\n", ligne); return 0; } /* résultat de l'exécution ----------------------------- token: ls token: tee /dev/tty token: toto ligne après traitement: ls
demande si tu captes pas ! -
Merci mais je comprend pas trop... comment je vais donc mettre ma chaine de caractère la dedans?
-
il faut faire ca en deux étapes:
d'abord créer ta chaine, puis concaténer ce que tu veux.
avec sprintf me semble-t*-il :
sprintf(machaine, "variable = %s", ma_chaine);
strcat(machaine," a la suite");
bonne chance -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
OK ça marche, merci !
Je ne vais pas clore ce post tout de suite parce que je sens que je vais encore avoir des questions.
Encore Merci -
-
et voila encore une question...
Je voudrais savoir si il existe une commande pour "couper" une chaine de caractere en C:
exempl:
chaine1 || '-' || chaine 2 || '-' || chaine 3....
Et ainsi de suite... comment est-ce que je pourrai récupérer les chaine 1, 2 et 3?
Merci -
C'est pas que je capte pas mais j'ai une question:
pourquoi à la fin tu affiche la chaine ligne (alors qu'elle n'a pas été modifiée non?).
Et pourquoi il reste que le premier champ dans ta chaine de caractère???
Merci de tes explications ! -
alors j'ai copié ce code d'internet, c'est pas moi qui l'ai fait.
d'après mes souvenirs:
----------
pourquoi à la fin tu affiche la chaine ligne (alors qu'elle n'a pas été modifiée non?).
si tu regardes le résultat qui est
token: ls
token: tee /dev/tty
token: toto
ligne après traitement: ls
on voit que ligne pointe sur le premier élément, et ptr vaut au fur et à mesure les valeurs de chaque élément.
-----------------
Et pourquoi il reste que le premier champ dans ta chaine de caractère???
je sais strtok est bizarre !
on ne reprécise pas quelle est la chaine en cours (juste 1 fois au début, puis NULL)...
après tu peux faire un tableaux de chaines et le remplir dans la boucle, tu l'auras complet à la fin de la séquence ! -
pfff c'est pas facile le C!!!
Je vais essayer de faire quelques chose de potable.
Merci -
Bon en fait j'arrive a rien d'interessant... il faudrait que je récupère les différents champs dans un tableau (ça je pourrais le faire avec ton exemple!) mais je ne sais pas comment utiliser le tableau une fois sorti de la fonction... peut-être le déclaré en globale non?
-
resalut
ta fonction qui traite ta chaine peut retourner le tableau contenant les éléments, ainsi tu pourras les utiliser après.
Mettre en global, être possible ça doit aussi. -
Merci pour ta réponse Edoc, mais il me reste une erreur:
voila mon bout de prog:
recup_champs_detail(ma_chaine);
void recup_champs_entete(char *ligne)
{
char *sep= "||'-'||";
char *ptr;
taille=0;
ptr = strtok(ligne, sep);
while ( ptr != NULL )
{
tab_champ_entete[taille] = ptr;
ptr = strtok(NULL, sep);
taille++;
}
}
Avec tab_champ_entete définit en gloable:
char **tab_champ_entete;
error:
'recup_champs_detail' : redefinition; different basic types
Si tu as une idée.... -
ptite erreur:
la première ligne c'est:
recup_champs_entete(ma_chaine);
C'est parce qu'en fait j'en ai 2 de fonctions similaire... -
ça veut peut-être dire que tu déclares soit deux fois ta fonction,
soit que ta déclaration et le corps de cette fontion sont différents ?
ex recup_champs_detail(int)
puis
recup_champs_detail(char ** tt)
(c'est un exemple);
vérifies que ta fonction est déclarée à chaque fois pareil.