Probleme avec strcat
ojou
Messages postés
51
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.
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 :
demande si tu captes pas !
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 !
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
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
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
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 !
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 !
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 !
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.
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....
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...
la première ligne c'est:
recup_champs_entete(ma_chaine);
C'est parce qu'en fait j'en ai 2 de fonctions similaire...