strcat() et sprintf()
Ce serait plus rapide? Ce:
sprintf(&str[strlen(str)], "Something");
ou
strcat(str, "Something");
Est-il une différence de performance?
Feinberg - N'est-ce pas en partie le point de Débordement de Pile? Bien sûr, il pourrait probablement concocter un test de performance, mais si quelqu'un d'autre l'a déjà fait, pourquoi réinventer la roue?
Veuillez noter que la bonne utilisation de sprintf est
Veuillez noter que la bonne utilisation de sprintf est
sprintf(str, "%s", other_str)
, et pas sprintf(str, other_str)
, ou bien vous pouvez peut-être risquer une vulnérabilité de chaîne de formatOriginalL'auteur lxe | 2009-11-20
Vous devez vous connecter pour publier un commentaire.
strcat
serait plus rapide carsprintf
a de la première analyse la chaîne à la recherche pour le format des variables.Mais la vraie victoire, c'est le fait que tout le monde sait ce
strcat
- concaténation de chaînes. À l'aide desprintf
pour la concaténation n'est pas une utilisation standard. Et il serait d'amener les gens à faire une double prise.OriginalL'auteur Justin Rudd
Donné le choix entre les deux, je choisirais
strcat
; il est certainement plus lisible et rend vos intentions claires. Il pourrait également être légèrement plus rapide quesprintf
, mais probablement pas par beaucoup.Mais, quelle que soit la méthode que vous choisissez, vous devriez certainement utiliser
snprintf
oustrncpy
pour dépassement de la mémoire tampon de protection.Marqués à cette question que les deux
c
etc++
; si vous êtes à l'aide de C++, il serait de loin préférable d'utiliser unstd::string
à la place.OriginalL'auteur James McNellis
Si il y a une différence, cette différence varie selon les drapeaux de compilation, l'utilisation de l'ordinateur au moment où le code est en cours d'exécution, la mise en œuvre de bibliothèque, ..., ...
Pour votre cas spécifique, mesure.
Exécuter à la fois des extraits de quelques milliards de fois et de temps.
Je doute beaucoup, vous trouverez une grande différence.
J'aime
strcat()
mieux: il traduit clairement la signification du code.OriginalL'auteur pmg
Je suis d'accord avec les autres:
strcat()
devrait être plus rapide. Mais pour les "meilleures pratiques", si vous vous souciez vraiment de la vitesse, vous devez utiliser ni. Vous feriez mieux d'avoir une structure comme:de garder une trace de la fin de la chaîne. Lorsque vous ajoutez une chaîne de caractères, il suffit de sauter à la fin et de le copier. Double
max
si la mémoire allouée n'est pas assez grand. Alternativement, vous peut avoir quelque chose d'un peu de fantaisie par emballagelen
,max
etstr
ensemble.OriginalL'auteur user172818
strcat
est beaucoup plus rapide dans ce cas. Rappelez-vous quesprintf()
analyse de la chaîne de format, caractère par caractère la recherche d' % s'échappe. Comparez cela à:par exemple.
OriginalL'auteur Paul Hsieh