warning Posté(e) le 12 mars 2008 Partager Posté(e) le 12 mars 2008 #include <stdio.h> #include <stdlib.h> #include <string.h> char recup_champ(char*,char*,char*); int main(void) { char*requete_get ; char message[50]; requete_get=(char*)getenv("QUERY_STRING"); recup_champ(requete_get,"message",message); } ET quand j'execute voila ce que j'ai . [Linker error] undefined reference to `recup_champ' Ce programme servira de script pour recupere des données a partir d'une url . Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 12 mars 2008 Partager Posté(e) le 12 mars 2008 Il faudrait peut être que tu définisse ta fonction recup_champ Lien vers le commentaire Partager sur d’autres sites More sharing options...
warning Posté(e) le 12 mars 2008 Auteur Partager Posté(e) le 12 mars 2008 ue j'ai compris enfaite moi en c c'est lamentable des fois genre je coryais qu'il allai me chercher ce qu'il y avait dans message tout seul . Bon j'ai une autre question avec requete_get je recupere ca "message=Bonjour&B1=Valider" ce que je voudrais c'est pouvoir extraire juste le message qui Bonjour dans ce cas la . code html : <p>Quel est votre message ? <input size="20" name="message" type="text"></p> Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 12 mars 2008 Partager Posté(e) le 12 mars 2008 Ce serait possible de reformuler ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
warning Posté(e) le 12 mars 2008 Auteur Partager Posté(e) le 12 mars 2008 Ok je vais essayer Alors je voudrais extraire dans une variable par exemple le mot Bonjour de la chaine message=Bonjour&B1=Valider sachant que Bonjour pourrait etre salut , kikoo , mdr , lol , 53480 etc. Sauf que je conai pas la fonction qui permetterai de faire ca . ( en language c ou c++ ) c'est pour faire un script cgi . Merci Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 12 mars 2008 Partager Posté(e) le 12 mars 2008 Donc tout ce qui est entre message= et &, c'est ça ? Ça peut se faire avec une expression rationnelle, par exemple, libpcre pour du C ou libpcrecpp / boost pour du c++ Lien vers le commentaire Partager sur d’autres sites More sharing options...
lorinc Posté(e) le 13 mars 2008 Partager Posté(e) le 13 mars 2008 ou alors comme un gros goret : int deb = 0, fin; char* outstr; //récupération de la position du premier '=' while(message[deb] != '=') deb++; deb++; //récupération de la position du premier '&' fin = deb; while(message[fin] != '&') fin++; //copie de la chaine correpsondante outstr = malloc((fin-deb)*sizeof(char)); strncpy(outstr, message+deb, fin-deb); outstr[fin-deb] = 0; Y a pitêtre à jouer sur les indices si jamais un '&' ou un '=' resterait par mégarde ( ) Mais sinon, la solution la plus pérenne, c'est effectivement d'utiliser une bilbiothèque de mlanipulation de chaînes. Sans aller jusqu'à la regexp, tu peut y arriver avec des split() ou autre Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 13 mars 2008 Partager Posté(e) le 13 mars 2008 Ou alors sans lib, on peut faire comme ça : char *start = strchr (txt, '=')+1; char *end = strchr (start, '&')+1; char *resultat; resultat = malloc ((end-start)*sizeof (char)); memcpy (resultat, start, (end-start)); resultat [end-start-1] = 0; Lien vers le commentaire Partager sur d’autres sites More sharing options...
lorinc Posté(e) le 13 mars 2008 Partager Posté(e) le 13 mars 2008 yep, plus simple (sauf que on veut pas le '&' -qui sera remplacé par 0 - donc uniquement "end = strchr(start, '&');" ) Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 13 mars 2008 Partager Posté(e) le 13 mars 2008 Exact, mais il faut remplacer end-start-1 par end-start Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.