2009-05-18 74 views
4

將內存緩衝區與常量字符串進行比較的正確C++方法是什麼 - strcmp(buf, "sometext")?我想避免不必要的內存複製,因爲創建臨時std :: string對象。用C++中的const char *比較緩衝區

謝謝。

+0

請張貼一些代碼使用std :: string來說明你在問什麼。 – 2009-05-18 13:35:47

回答

3

如果你只是檢查平等,你可以使用std::equal

#include <algorithms> 

const char* text = "sometext"; 
const int len = 8; // length of text 

if (std::equal(text, text+len, buf)) ... 
當然

這將需要額外的邏輯,如果你的緩衝區可以比文字更小

1

strcmp工作正常,沒有複製。或者,您也可以使用memcmp。但是,在C++中,爲什麼不使用std::string

+1

如果我將buf轉換爲std :: string,緩衝區內容將被複制到字符串對象中 - 我想避免這種情況,因爲經過比較後,我與它無關。 – jackhab 2009-05-18 13:38:54

+0

strncmp稍微安全一些,但是你必須確保爲'n'輸入正確的值。或者,如果你知道緩衝區比你比較的常量字符串長,那麼strcmp就沒問題了。 – 2009-05-18 13:52:46

1

我會使用memcmp,並且作爲最後一個參數,請使用2種數據大小中的最小值。

另外檢查以確保這兩個大小是相同的,否則你只是比較最短的前綴。

+0

他的數據還沒有在字符串中 - 他試圖避免把它放在一個。 – 2009-05-18 13:49:53

0

你可以不喜歡它,

const char* const CONST_STRING = "sometext"; 

strcmp(buf,CONST_STRING); 
4

STRCMP是好的,如果你知道你的緩衝區的內容。 std::strncmp可能會爲您提供更多針對緩衝區溢出的安全性。