cs_ProgVal
Messages postés33Date d'inscriptiondimanche 23 avril 2006StatutMembreDernière intervention22 octobre 2006
-
17 juin 2006 à 16:32
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 2009
-
17 juin 2006 à 23:03
Bojour,
Comment faît-on pour "découper" une chaîne de cerartères? Par exemple 1 caractère sur 2.
Decouper une chaine de caractere en 2 par : mezaya le 13/10/2005 20:50:43 :
une chaine de caractères est rien d'autre qu'un tableau de caratère.
int j=0,jj=0;
while( ACL[i].unDroit[j] != ':' ) j++; // ici je me dans la chaine jusqu'au caractère ':'
j++; // j'avance d'un caractère pour ne pas copier le caratère ':'
while( ACL[i].unDroit[j+jj] !='\0' )
{
recup_acl[jj] = ACL[i].unDroit[j+jj]; // je copie le reste de la chaine dans recup_acl
j++;
}
recup_acl[jj] = '\0'; // je termine pas le caratère fin de chaine pour avoir une chaine valide.
si tu veut copier les 2 variables tu peut modifier le code comme ceci :
int j=0,jj=0;
while( ACL[i].unDroit[j] != ':' )
{
recup_acl_gauche[j] = ACL[i].unDroit[j]; // copie la 1er variable dans recup_acl_gauche
j++;
}
recup_acl_gauche[jj] = '\0'; // fin de chaine
j++; // je ne copie pas le ':'
while( ACL[i].unDroit[j+jj] !='\0' )
{
recup_acl_droite[jj] = ACL[i].unDroit[j+jj]; // copie
j++;
}
recup_acl_droite[jj] = '\0'; // fin de chaine
Au final recup_acl_gauche var1 et recup_acl_droite var2
il faut être sûr que len+start ne soit pas plus gros que le total de mémoire alloué à la variable car sinon, la fonction pourrais déborder et écrire ou il ne faut pas. Même si len+start reste dans la mémoire alloué, il faut faire très attention à len car un taille exausive pourrais ralentire la vitesse d'execution. Il existe peut-être un autre moyen de rendre cette fonction plus rapide et sécuritaire mais je ne la connais pas encore. Si BruNews passait par ici, ce serait aimable de sa par de corriger cette fonction.
___________________________________________
Les plus grands esprits trouvent toujours une solution
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 17 juin 2006 à 20:29
char c = !NULL;
??
Et ton goto fEND; n'est vraiment pas nécessaire, tu peux quand même le faire plus proprement:
if((start < 0) || (len < 0))
{
destination[0] = 0;
}
else
{
int pos = len;
while(len >= 0)
{
destination[len] = source[len+start];
len--;
}
destination[pos] = 0;
}
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 17 juin 2006 à 20:52
Faut me pardonner, j'ai pas toute ma tête aujourd'hui. Je me suis levé très tôt, j'ai mal au coup et à la tête et il fait chaud. Bon je reformule ma fonction avec l'aide de vecchio:
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 17 juin 2006 à 23:03
Ben c'est que je suis pas normal ;) Non sans blague. Je préfère l'écrire comme ça. Ça reviend au même de toute façon. C'est que quand j'initialise une variable avec dison 1, ça veut dire que je vais utiliser ce 1 quelque part. Mais !NULL, ça veut juste dire que la variable ne doit pas être nulle initalement. Jsais pas trop comment l'expliquer. Menfin c'est ma manière de faire.
___________________________________________
Les plus grands esprits trouvent toujours une solution