Probleme avec strcat

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

  • Votes
  • Date
  • Date décroissante
  1. 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. Merci mais je comprend pas trop... comment je vais donc mettre ma chaine de caractère la dedans?
      1. 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
        1. 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
          1. 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
            1. 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 !
              1. 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 !
                1. pfff c'est pas facile le C!!!

                  Je vais essayer de faire quelques chose de potable.

                  Merci
                  1. 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?
                    1. 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.
                      1. 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....
                        1. 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...
                          1. ç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.