Probleme avec strcat

ojou Messages postés 51 Statut Membre -  
 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

15 réponses

Utilisateur anonyme
 
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.
1
Utilisateur anonyme
 
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 !
1
ojou Messages postés 51 Statut Membre
 
Merci mais je comprend pas trop... comment je vais donc mettre ma chaine de caractère la dedans?
0
Utilisateur anonyme
 
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ojou Messages postés 51 Statut Membre
 
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
0
Utilisateur anonyme
 
mais de rien
0
ojou Messages postés 51 Statut Membre
 
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
0
ojou Messages postés 51 Statut Membre
 
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 !
0
Utilisateur anonyme
 
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 !
0
ojou Messages postés 51 Statut Membre
 
pfff c'est pas facile le C!!!

Je vais essayer de faire quelques chose de potable.

Merci
0
ojou Messages postés 51 Statut Membre
 
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?
0
Utilisateur anonyme
 
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.
0
ojou Messages postés 51 Statut Membre
 
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....
0
ojou Messages postés 51 Statut Membre
 
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...
0
Utilisateur anonyme
 
ç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.
0