Probleme avec strcat

ojou Messages postés 58 Date d'inscription   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

  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
  2. ojou Messages postés 58 Date d'inscription   Statut Membre
     
    Merci mais je comprend pas trop... comment je vais donc mettre ma chaine de caractère la dedans?
    0
  3. 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
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. ojou Messages postés 58 Date d'inscription   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
  6. ojou Messages postés 58 Date d'inscription   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
  7. ojou Messages postés 58 Date d'inscription   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
  8. 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
  9. ojou Messages postés 58 Date d'inscription   Statut Membre
     
    pfff c'est pas facile le C!!!

    Je vais essayer de faire quelques chose de potable.

    Merci
    0
  10. ojou Messages postés 58 Date d'inscription   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
  11. 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
  12. ojou Messages postés 58 Date d'inscription   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
  13. ojou Messages postés 58 Date d'inscription   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
  14. 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