簡體   English   中英

strcat()vs sprintf()

[英]strcat() vs sprintf()

什么會更快? 這個:

sprintf(&str[strlen(str)], "Something");

要么

strcat(str, "Something");

有任何性能差異嗎?

strcat會更快,因為sprintf必須首先掃描字符串以查找格式變量。

但真正的勝利是每個人都知道strcat正在做什么 - 連接字符串。 使用sprintf進行連接不是標准用法。 它會讓人們做雙重拍攝。

鑒於兩者之間的選擇,我會選擇strcat ; 它肯定更具可讀性,使你的意圖清晰。 它也可能比sprintf略快,但可能不是很多。

但是,無論您選擇哪種方法,都應該使用snprintfstrncpy進行緩沖區溢出保護。

你把這個問題標記為cc++ ; 如果您使用的是C ++,那么使用std::string會好得多。

如果存在差異,則該差異根據編譯器標志,代碼運行時的計算機使用情況,庫實現,...,......而有所不同。

針對您的具體情況,進行衡量
將兩個片段運行幾十億次並計時。

我非常懷疑你會發現任何重大的不同。

我更喜歡strcat() :它清楚地傳達了代碼的含義。

在這種情況下, strcat要快得多。 請記住, sprintf()按字符解析格式字符串,查找%escapes。 比較這個:

strcpy (str + strlen (str), "Something");

例如。

我同意其他人: strcat()應該更快。 但對於“最佳實踐”,如果你真的關心速度,你就不應該使用。 你最好有一個像這樣的結構:

typedef struct { size_t len, max; char *str; } mystring_t;

跟蹤字符串的結尾。 附加字符串時,只需跳到最后並復制即可。 max如果分配的內存不夠大。 或者,通過將lenmaxstr打包在一起,您可能會有點想象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM