warning Posté(e) le 12 mars 2008 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 .
theocrite Posté(e) le 12 mars 2008 Posté(e) le 12 mars 2008 Il faudrait peut être que tu définisse ta fonction recup_champ
warning Posté(e) le 12 mars 2008 Auteur 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>
warning Posté(e) le 12 mars 2008 Auteur 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
theocrite Posté(e) le 12 mars 2008 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++
lorinc Posté(e) le 13 mars 2008 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
theocrite Posté(e) le 13 mars 2008 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;
lorinc Posté(e) le 13 mars 2008 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, '&');" )
theocrite Posté(e) le 13 mars 2008 Posté(e) le 13 mars 2008 Exact, mais il faut remplacer end-start-1 par end-start
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.