aide rapide sscanf

aide rapide sscanf - Programmation

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 ????

Reply

Marsh Posté le 19-09-2001 à 18:04:51   

Reply

Marsh Posté le 19-09-2001 à 18:12:43    

%s matche une chaine jusqu'à un whitespace (tab, espace, etc.)

Reply

Marsh Posté le 19-09-2001 à 18:19:05    

et pour que ca s arrete au "&" je peux faire ca d une maniere simple ??

Reply

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.

Reply

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]

Reply

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:)

Reply

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.

Reply

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.

Reply

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.

Reply

Marsh Posté le 19-09-2001 à 23:45:11    

c est a ce moment que la fonciton que tu m a passé sert non ?!

Reply

Marsh Posté le 19-09-2001 à 23:45:11   

Reply

Marsh Posté le 19-09-2001 à 23:45:35    

je parle de celle d un topic precedent

Reply

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]

Reply

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,

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed