C 字串比較是否相等

時間 2021-05-06 21:10:09

1樓:Sigon

你同事這種人還能有班上,作為即將踏進職場的畢業生感到非常難受。

看看現在為了找個4千塊的實習都得刷一堆造航母難度的題。

回到問題,之所以能得到正確結果是因為編譯器優化,將常量存在同乙個記憶體位址,而==比較的是兩個指標是否指向同乙個記憶體位址,所以得到了結果。

你同事根本沒有理解C++邏輯,完全瞎貓碰上死耗子。這種人一不注意就可能對專案產生毀滅性的影響。

就是這種水平的妖魔鬼怪擠占著崗位,讓雙一流碩士博士找幾千的實習都難。多麼諷刺啊。

2樓:DLM-fakeS

char* 是指標型別,== 這樣比的是兩個位址是否相等(也就是兩個指標是否指向相同的位址)。比如說,

const char* p1 = "abc";

const char* p2 = "abc";

if (p1 == p2) 裡面為 true。兩個相同內容的常量字面值型的字串,編譯後指向的是位於唯讀的初始化資料段中的同乙個位址。

char str = "abc"; //這裡在棧上宣告的 str,屬於另乙個儲存位置。

if(p1 == str) 裡面為 false。

c++ 裡的 std::string 是乙個類,定義了 operator == ,所以兩個物件用 == 進行比較,比較的是字串的值。

3樓:vvzh017

看書上說:「由於C-串型別是字元指標,因此,比較兩個相同C-串的時候,會因空間位置的不同而不同」,然後分別用vs2012和DEVC++試了一下,好像確實可以直接比較啊,並且兩個指標指的位址不一樣,但是的確是可以進行判斷。

4樓:sin1080

把字串常量賦值給char*而不是const char*。

比較指標的操作,腦子裡當作比較內容的語義。

依賴編譯器優化來實現邏輯,玩UB。

重點是,不以為恥,反以為榮。

感覺你跟這種人同事(看起來還是老同事?),估計技術環境肯定糟透了,趕緊跳槽吧。

5樓:SuperFashi

你的同事屬於碰巧對的,千萬不要學。你可以cout一下&(pStr1[0])和&(pStr2[0])就知道為什麼了。

不過C++ 為什麼要用 char*,string類不好嗎?string的比較就可以直接拿==了來做了。

6樓:SuperSodaSea

簡單地說,編譯器有可能會把兩個相同的字串字面量優化為存到同乙個地方(但不一定會這樣做)。要比較字串的話還是老老實實用 strcmp 好。

另外把字串字面量直接賦值給 char* 在 C++11 已經被禁止了,硬要賦值的話得加上 const_cast。

C 中比較字串用 Equals 還是 ?

竹本祐太 操作符過載是c 留給家族語言的重要遺產,所以我在多數場景下都推薦使用 並且應該給自己的類實現這個操作符過載。對於使用者來說,至少有下面兩點好處 避免空指標異常,可以少一行空指標判斷 檢查物件型別,當物件型別不一致時,編譯器會直接報告,而不是等到執行時。當然equals也不是一無是處,因為e...

將C風格字串結尾字元改成其他字元(比如char a 「12」 a 2 f )會發生什麼?

50包郵 在微控制器程式設計裡面,一般用串列埠發字串的函式會有一句while s 0 來檢測字串是否發完 如果你把這個改過屁股的字串扔進去你會在串列埠助手收到除了 12 以外一堆很長的亂七八糟的東西 桃又 你如果再把它當C風格字串來讀,它就會讀到天荒地老直到遇見乙個 0。良心的VC 在除錯模式下會把...

C語言字串如何賦值及輸出?

那個人 你這不是字串賦值,而是字串指標賦值。你定義的是乙個字串指標,指向的是字串常量的起始位址。字串定義 char buf LEN 賦值 strcpy buf,string 或sprintf buf,s string 先不用嘟嘟嘟,p abc 其他不變 首先執行時記憶體裡面會有乙個位置儲存 abc ...