2017-03-23 9 views
0

Je sais, strlcpy est plus sûr que strncpy lors de la copie de tableaux de caractères source à destination où nous voulons que la destination soit nulle, Le wrapper suivant est-il correct?strlcpy en termes de strncpy sur les plates-formes qui n'ont pas strlcpy

size_t strlcpy(char *dst, const char *src, size_t size) { 
    if (size != 0) { 
    int maxSize = size - 1; 
    int currSize = -1; 
    while ((++currSize < maxSize) && (*dst++ = *src++)); 
    *dst = 0; 
    return currSize; 
    } 
    return 0; 
} 

Veuillez commenter.

Répondre

0

La vérification de size pour être au-dessus de zéro est trompeuse, car size_t est non signé. Une vérification plus lisible est if (size != 0) ...

Un autre problème est que strncpy PADS sa destination avec des zéros jusqu'à s, qui strlcpy ne fait pas. Si vous souhaitez faire correspondre le comportement de strlcpy, écrivez votre propre implémentation sur les systèmes où elle n'est pas disponible, plutôt que de s'appuyer sur .