aide rapide sscanf - Programmation
Marsh Posté le 19-09-2001 à 18:12:43
%s matche une chaine jusqu'à un whitespace (tab, espace, etc.)
Marsh Posté le 19-09-2001 à 18:19:05
et pour que ca s arrete au "&" je peux faire ca d une maniere simple ??
Marsh Posté le 19-09-2001 à 18:28:50
expression regulière (doit bien y avoir une lib en C)
ou getc + scan à la patte.
Marsh Posté le 19-09-2001 à 18:35:15
tu fais un script en C pour recup els param du CGI ?
si oui alors essaie ça
change_et(data);
if(sscanf(data,"M=%s O=%s P=%s",nomdico,mot,page) != 3)
{
erreur = 102;
}
else
.......
La fonction 'change_et' :
void change_et(char *val)
{
int i;
i = 0;
while(*(val+i) != '\0')
{
if(*(val+i) == '&')
*(val+i) = ' '; // caractère blanc ascii = 32
i++;
}
}
[edtdd]--Message édité par barbarella--[/edtdd]
Marsh Posté le 19-09-2001 à 18:37:10
ca se voit tant que ca
a premiere vue c est exactement ce qu il faut
merci
Marsh Posté le 19-09-2001 à 18:44:49
ah oui,
la fonctionne change_et, transforme les '&' en ' ' afin de pouvoir utiliser le sscanf.
Attention n'oublie pas que avant le passage de param tu dois transformer les ' ' en '+', sinon t'auras des prob.
Marsh Posté le 19-09-2001 à 22:59:59
justemement, j ai essayé de passer "aaaa bbbb" dans le premier champs et il a trouvé "aaaa+bbbb" comme chaine.
Marsh Posté le 19-09-2001 à 23:31:21
hehe
c'est normal. C'est bien connu la nature n'aime pas le vide. t'as pas encore vu ce qu'il va te faire quand tu vas vouloir passer des chaines comme : l'arrivée des français de 'france'
il faut que tu fasses une fonction de codage et de décodage our chaque variable. Normalement les carac doivent être transformé en %XX sauf les chiffres lettre de l'alphabet.
Marsh Posté le 19-09-2001 à 23:45:11
c est a ce moment que la fonciton que tu m a passé sert non ?!
Marsh Posté le 19-09-2001 à 23:56:34
non,
ça c'est autre chose.
Si tu envoies des variables qui peuvent contenir autre chose que des 012...9A..Za..z tu dois faire une fonction code_champ en faisant une boucle de lecture des char et en transformat les char indésirables par j += sprintf((dest+j),"%%x",(scr+i));
%x signifie que tu tranformes en hexa la valeur du caractère
En fait l'espace va être transformé en %20 (en hexa) le fait de mettre un % de la valeur hexa du char est une convention mais tu peux la changer. Moi j'utilse $ a cause d'un bogue de IE dans un cas très rare.
Pour le décodage tu refais la même boucle mais en utilisant
sscanf((src+i+1), "%2x", &y)
ou 'y' est un : unsigned int
soit :
if(*(src+i) == '%'
{
sscanf((src+i+1), "%2x", &y)
*(dest+j) = (char)y;
}
enfin un truc du genre
[edtdd]--Message édité par barbarella--[/edtdd]
Marsh Posté le 20-09-2001 à 19:34:47
si j ai bien capté
sscanf transformes les caracteres speciaux, en %XX où XX est un nombre en hexadecimal, il faut donc que je remplace dnas la chaine ce %XX, par le caractere equivalent en ascii pour al page html,
Marsh Posté le 19-09-2001 à 18:04:51
voila :
char*data="nom=my_name&prenom=my_fisrt_name";
char c1[25],c2[25];
alors >> sscanf(data,"nom=%s&prenom=%s",c1,c2) != 2
dans nom j ai : my_name&preom=my_fisrt_name
dans prenom j ai : $
ou ca cloche ????