-1
votes

Si je fais un chemin de fichier, lequel d'entre eux est plus rapide?

donc je fais du code pour créer un chemin de fichier à partir d'un nom. XXX PRE>

et P>

strcpy(FilePath, DirPath);
strcat(FilePath, "/");
strcat(FilePath, FileName);


3 commentaires

Cela ne va probablement pas donner un effet mesurable. Soyez prudent que cela ne soit pas sécurisé et que si le FilePath String Garantie doit être plus long que Dirpath + FilePath + 2 , le programme va être insécurisé. Utilisez snaprintf à la place.


Dans mes tests, la méthode Strcpy ETC était d'environ 10 fois plus rapide, avec un réprimé . Le point mort-même était lorsque dirpath a environ 450 caractères.


@toastted_flakakes Je fais Malloc (Strlen (Dirpath) + Strlen (FilePath) + 2);


3 Réponses :


1
votes
  • appelez strlen () plus d'une fois pour toute chaîne
  • à la place: N'oubliez pas la longueur et réutilisez-le
  • calculez la position où vous êtes dans la chaîne
  • N'oubliez pas que strcat () doit modifier la chaîne de destination à chaque fois pour trouver son courante fin actuel conduisant à un comportement quadratique
    xxx

    normalement, l'appelant peut déjà connaître le strallen () , par exemple pour des chemins constants. < / p>


1 commentaires

De mon commentaire ci-dessus, pour le nom de chemin plus long (450), cela prend la moitié du temps.



0
votes
sprintf(FilePath, "%s/%s", DirPath, FileName);
is faster, because the second version has to compute the end of string twice in the strcat function calls.sprintf composes the string while retaining the last string character all the time, no need to recompute it.

1 commentaires

Le problème est ( au moins ), que la famille PrintF-Family se copie deux fois. (Et, pour la santé mentale, vous devez utiliser snaprintf () , ce qui est encore plus cher)



0
votes

avec POSIX, vous pouvez écrire

p = FilePath;
p = stpcpy(p, DirPath);
*p++ = '/';
p = stpcpy(p, Filename);


0 commentaires