Fonction Convert

Signaler
Messages postés
47
Date d'inscription
vendredi 21 mai 2004
Statut
Membre
Dernière intervention
23 avril 2007
-
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
-
Voila mon code marche, mais comme je ne suis pas un super programmeur, je pense qu'il ya moyen de l'amélioré, c'est la que vous intervenez :D
En fait il sert a remplacer uen chaine de numeros en une chaine de caracteres.
Ex: Convert(0, 108,111,108, 0) = "lol"

char * Convert(char *buf,...)
{
char *exps[1024];
char *p;
int ep = -1;
va_list vp;
va_start(vp,buf);
char result[50];
sprintf(result,"");
while(p = (char *)va_arg(vp, char *) )
{
exps[ep++] = p;
sprintf(result,"%s%c",result,p);
}
return result;
}


int main(int argc, char* argv[]) {
MessageBox(NULL,Convert(0, 86,111,105,108,97,32,99,101,99,105,32,101,115,116,32,117,110,101,32,103,114,97,110,100,101,32,102,114,97,115,101,44,32,101,116,32,111,110,32,99,111,110,115,116,97,116,101,32,113,117,101,32,99,97,32,109,97,114,99,104,101,32,33, 0),NULL,0);
}

6 réponses

Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Pour commencer, on ne renvoie jamais un pointeur locale dans une fonction.
Secondo, a quoi te sert le char * buff ?
Si c'est uniquement pour le va_start, passe plutot par atoi en gardant ton fonctionnement a N variables.
Sinon pourquoi avoir changé ta méthode avec les 0.108.111.108.0 ?
Pour ma part je trouve beaucoup plus simple de garder cette méthode en adaptant ta fonction convert.

Si tu veux un exemple pour cette méthode, il y a pas de soucis.

Shell
Messages postés
47
Date d'inscription
vendredi 21 mai 2004
Statut
Membre
Dernière intervention
23 avril 2007

en fait la méthode a changer car ce $Convert me permet de masker ma source en fait on voi pas les Integer dans la source compilé alors qu'on voit les CHAR.
Donc grace a cette methode je peu masquer ma source.
Ensuite comment faire pour le pointeur alors ?
Le char * buff me sert strictement a rien, c juste que l'on peu pas faire: Convert(...), on est obliger de mettre quelque chsoe avant les 3.
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Masquer ta source ?
Je doute qe ce soit d'une grande utilité. Au final tout revient à faire du code assembleur.
Donc plutot que de chercher a faire un code "masqué", opte plutot pour un code plus performant et surtout plus simple!

Tu ne pourra JAMAIS protégé un programme par du pseudo code!
Ca se saurai deja, et les crack n'existerai alors pas!

Shell
Messages postés
47
Date d'inscription
vendredi 21 mai 2004
Statut
Membre
Dernière intervention
23 avril 2007

char * replace(char *buf,...)
{
char *p;
va_list vp;
va_start(vp,buf);
char *result=(char *)malloc(2*sizeof(char));
sprintf(result,"");
while(p = (char *)va_arg(vp, char *) )
{
result = (char *)realloc(result,strlen(result) +2 * sizeof(char));
sprintf(result,"%s%c",result,p);
}
return result;
}
La jai changer le pointeur, est-ce bon ?
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
A partir du moment ou une fonction renvoie un pointeur d'une variable locale, ton code n'est plus bon et source a des erreurs non controlées.

A ta place je ne passerai pas par les va_list, mais plutot par une simple chaine comme tu l'avais fait au début (108.111.108)

Shell
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Voici la fonction Convert sans tout ces va_list :


char * Convert(
char * pszDest,
const
char szSrc[])
{

int i;

int j;

char szNumber[4];


i = 0;
j = 0;



while(*szSrc)
{

if(*szSrc == '.')
{
szNumber[j] = 0;
pszDest[i++] = (
char) atoi(szNumber);
szNumber[0] = 0;
j = 0;
}

else
{
szNumber[j++] = *szSrc;
}


szSrc++;
}



if(szNumber != 0)
{
pszDest[i++] = (
char) atoi(szNumber);
}

pszDest[i] = 0;



return pszDest;
}

Shell