[英]strcat() vs sprintf()
什么會更快? 這個:
sprintf(&str[strlen(str)], "Something");
要么
strcat(str, "Something");
有任何性能差異嗎?
strcat
會更快,因為sprintf
必須首先掃描字符串以查找格式變量。
但真正的勝利是每個人都知道strcat
正在做什么 - 連接字符串。 使用sprintf
進行連接不是標准用法。 它會讓人們做雙重拍攝。
鑒於兩者之間的選擇,我會選擇strcat
; 它肯定更具可讀性,使你的意圖清晰。 它也可能比sprintf
略快,但可能不是很多。
但是,無論您選擇哪種方法,都應該使用snprintf
或strncpy
進行緩沖區溢出保護。
你把這個問題標記為c
和c++
; 如果您使用的是C ++,那么使用std::string
會好得多。
如果存在差異,則該差異根據編譯器標志,代碼運行時的計算機使用情況,庫實現,...,......而有所不同。
針對您的具體情況,進行衡量 。
將兩個片段運行幾十億次並計時。
我非常懷疑你會發現任何重大的不同。
我更喜歡strcat()
:它清楚地傳達了代碼的含義。
在這種情況下, strcat
要快得多。 請記住, sprintf()
按字符解析格式字符串,查找%escapes。 比較這個:
strcpy (str + strlen (str), "Something");
例如。
我同意其他人: strcat()
應該更快。 但對於“最佳實踐”,如果你真的關心速度,你就不應該使用。 你最好有一個像這樣的結構:
typedef struct { size_t len, max; char *str; } mystring_t;
跟蹤字符串的結尾。 附加字符串時,只需跳到最后並復制即可。 雙max
如果分配的內存不夠大。 或者,通過將len
, max
和str
打包在一起,您可能會有點想象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.