donc je fais du code pour créer un chemin de fichier à partir d'un nom. et P> strcpy(FilePath, DirPath);
strcat(FilePath, "/");
strcat(FilePath, FileName);
3 Réponses :
strlen () code> plus d'une fois pour toute chaîne li>
- à la place: N'oubliez pas em> la longueur et réutilisez-le li>
- calculez la position où vous êtes em> dans la chaîne li>
- N'oubliez pas que
strcat () code> doit modifier la chaîne de destination à chaque fois pour trouver son courante em> fin actuel conduisant à un comportement quadratique li>
xxx pré>
normalement, l'appelant peut déjà connaître le strallen () code>, par exemple pour des chemins constants. < / p> ul>
De mon commentaire ci-dessus, pour le nom de chemin plus long (450), cela prend la moitié du temps.
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.
Le problème est ( au moins i>), que la famille PrintF-Family se copie deux fois. (Et, pour la santé mentale, vous devez utiliser snaprintf () code>, ce qui est encore plus cher)
avec POSIX, vous pouvez écrire
p = FilePath; p = stpcpy(p, DirPath); *p++ = '/'; p = stpcpy(p, Filename);
Cela ne va probablement pas donner un effet mesurable. Soyez prudent que cela ne soit pas sécurisé et que si le
FilePath code> String Garantie doit être plus long queDirpath + FilePath + 2 code>, le programme va être insécurisé. Utilisezsnaprintf code> à la place.Dans mes tests, la méthode
Strcpy code> ETC était d'environ 10 fois plus rapide, avec unréprimé code> code>. Le point mort-même était lorsquedirpath code> a environ 450 caractères.@toastted_flakakes Je fais
Malloc (Strlen (Dirpath) + Strlen (FilePath) + 2); Code>