Salut,
Prenons le code suivant, qui affiche ce qu'il y a après le dernier \ de la chaîne :
void test()
{
char* lpPath = "c:\\toto";
char* lpCurrent;
char* lpLastBackSlash;
lpCurrent = lpPath;
lpLastBackSlash = lpCurrent;
while (*lpCurrent)
{
if (*lpCurrent == '\\')
{
lpLastBackSlash = lpCurrent;
lpLastBackSlash++;
}
lpCurrent++;
}
printf(lpLastBackSlash);
}
A première vue pas d'erreur, ou du moins ça ressemble au genre de code que l'on peut s'attendre pour faire ce genre de chose : char* et incrémentation de pointeurs.
Ce code est compilé en MBCS, Multiple Byte Character Set. On a le choix entre MBCS et UNICODE, sachant que char* n'est pas du tout UNICODE, on ne peut compiler qu'en MBCS. Autrement dit, un caractère peut faire plusieurs octets.
Autrement dit, ce code est potentiellement faux, dans le cas où lpPath viendrait par exemple de GetCurrentDirectory. Potentiellement faux revient à dire qu'il est faux...
Il faudrait utiliser
_mbsinc (Ou _tcsinc) pour incrémenter les pointeurs et
_mbccmp (Ou _tccmp) pour comparer les caractères.
Mais on peut pas dire que ce soit des fonctions couramment utilisées...
Des réflexions sur le sujet ?