c char字元相等比較 字串使用的小誤區

2021-10-11 09:04:48 字數 1528 閱讀 2635

最近**評審時候遇到的這些坑。
咋一看**貌似沒什麼問題,簡單的字串比較。可是仔細看了看感覺**不對勁,執行結果卻是一直是輸出"utf-32"。這裡有個誤區是,字串(char *)是不能直接比較的,下列**比較的是字串的位址,這樣就會導致它們字串位址永遠不會相等就一直輸出的是"utf-32"結果了。

string str("gbk");

if (str.c_str() == "gbk")

cout << "gbk";

else if (str.c_str() == "utf-8")

cout << "utf-8";

else if (str.c_str() == "utf-16")

cout << "utf-16";

else

cout << "utf-32";

正確做法:

直接使用string物件比較

string str("gbk");

if (str == string("gbk"))

cout << "gbk";

else if (str == string("utf-8"))

cout << "utf-8";

else if (str == string("utf-16"))

cout << "utf-16";

else

cout << "utf-32";

使用strcmp函式比較字串

string str("gbk");

if (strcmp(str.c_str(), "gbk") == 0)

cout << "gbk";

else if (strcmp(str.c_str(), "utf-8") == 0)

cout << "utf-8";

else if (strcmp(str.c_str(), "utf-16") == 0)

cout << "utf-16";

else

cout << "utf-32";

下列**執行後直接段錯誤,原因是釋放了乙個非法的記憶體位址(靜態儲存區)。慶幸的是在c++11中,編譯器會直接報錯。

char *str = (char *)malloc(32);

str = "hello world!";

free(str);

正確做法(使用strcpy複製字串):

char *str = (char *)malloc(32);

strcpy(str, "hello world!");

free(str);

字串相等比較

如果說現在要是有兩個int型的變數判斷其相等可以使用 完成。範例 觀察基本資料型別比較 public class string demo 結果 ture 那麼如果說現在在string類的物件上使用了 呢?範例 觀察string直接使用 比較 public class string demo fals...

比較字串相等

equals 和運算子 c 中有兩種不同的相等 引用相等和值相等。值相等是大家普遍理解的意義上的相等 它意味著兩個物件包含相同的值。例如,兩個值為 2 的整數具有值相等性。引用相等意味著要比較的不是兩個物件,而是兩個物件引用,且兩者引用的是同乙個物件。這可以通過簡單的賦值來實現,如下面的示例所示 s...

shell字串比較,相等不相等

bin sh 測試各種字串比較操作。shell中對變數的值新增單引號,爽引號和不新增的區別 對型別來說是無關的,即不是新增了引號就變成了字串型別,單引號不對相關量進行替換,如不對 符號解釋成變數引用,從而用對應變數的值替代,雙引號則會進行替代 author tenfyguo a 1 b 2 echo...