最近**評審時候遇到的這些坑。咋一看**貌似沒什麼問題,簡單的字串比較。可是仔細看了看感覺**不對勁,執行結果卻是一直是輸出"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...