[問題] string 的比較

看板C_and_CPP (C/C++)作者 (zero)時間1年前 (2022/10/11 02:52), 編輯推噓7(7017)
留言24則, 10人參與, 1年前最新討論串1/1
開發平台(Platform): (Ex: Win10, Linux, ...) Linux 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 比較兩個string是否相同 餵入的資料(Input): x: Hi! y: Hi! 預期的正確結果(Expected Output): s, t是same x, y是same 錯誤結果(Wrong Output): s, t是same x,y是different 程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔) https://glot.io/snippets/geceusnnoz 補充說明(Supplement): 這邊我想請問的是如果是string的話,直接將兩個string用 == 來做比較的話, 比到的是應該是他們的address,為何直接給值得情況會是same,而用scanf 來給值會是false? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.177.0.123 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1665427926.A.889.html

10/11 03:34, 1年前 , 1F
因為編譯器把看到兩個一樣的靜態字串後只使用一塊記憶體
10/11 03:34, 1F

10/11 03:34, 1年前 , 2F
儲存兩者,因此s跟t也剛好指到了那個同樣的位置上
10/11 03:34, 2F

10/11 06:55, 1年前 , 3F
"用scanf來給值"←你把因果關係顛倒了
10/11 06:55, 3F

10/11 06:55, 1年前 , 4F
malloc 本來就是會回傳不同的東西, 跟你給什麼值無關
10/11 06:55, 4F

10/11 06:56, 1年前 , 5F
這即是為什麼 C string 需要使用字串比較函式的原因
10/11 06:56, 5F

10/11 09:11, 1年前 , 6F
簡單來說除了s、t以外你根本沒搞懂malloc和scanf
10/11 09:11, 6F

10/11 09:25, 1年前 , 7F
C的string 不是你認為的string object
10/11 09:25, 7F

10/11 09:25, 1年前 , 8F
他是null terminated char buffer
10/11 09:25, 8F

10/11 09:25, 1年前 , 9F
你為什麼覺得string objects == 是比address
10/11 09:25, 9F

10/11 09:26, 1年前 , 10F
本質上還是 pointer or array
10/11 09:26, 10F

10/11 09:26, 1年前 , 11F
不同程式語言的設計不一樣
10/11 09:26, 11F

10/11 09:26, 1年前 , 12F
只是 stdlib/string 是用 '\0' 來當作 string 的斷點
10/11 09:26, 12F

10/11 09:27, 1年前 , 13F
讓你覺得用 clib 操作起來像 string object 而已
10/11 09:27, 13F

10/11 09:27, 1年前 , 14F
哦 code真的寫常數char耶 ,那個要看elf檔啦
10/11 09:27, 14F

10/11 09:28, 1年前 , 15F
你的== 要用 strcmp 去做 他是C 不是 C++
10/11 09:28, 15F

10/11 11:00, 1年前 , 16F
我想說char * 所宣告的回傳值是address,所以就認為==比較
10/11 11:00, 16F

10/11 11:00, 1年前 , 17F
的是address
10/11 11:00, 17F

10/11 12:16, 1年前 , 18F
想到有些 C 語言題目也會考你 assign c string 後拿去
10/11 12:16, 18F

10/11 12:16, 1年前 , 19F
比較,問比出來 true or false...
10/11 12:16, 19F

10/11 16:13, 1年前 , 20F
你先把上面的same address 當不小心剛好而已 現在要去想為
10/11 16:13, 20F

10/11 16:13, 1年前 , 21F
什麼的話會離你學過的東西太遠
10/11 16:13, 21F

10/12 17:36, 1年前 , 22F
不要用同字串就不同了
10/12 17:36, 22F

10/12 20:37, 1年前 , 23F
他是比較地址沒錯啊,但你的目的是比較地址還是比較字
10/12 20:37, 23F

10/12 20:37, 1年前 , 24F
串內容?
10/12 20:37, 24F
文章代碼(AID): #1ZH6dMY9 (C_and_CPP)
文章代碼(AID): #1ZH6dMY9 (C_and_CPP)