作者timmy999 (憤怒a阿宅)
看板C_and_CPP
標題[問題] 對字串的理解
時間Sun Jan 20 19:56:36 2019
大一 有一題題目問道
輸入一種語言的你好 並輸出他是哪種語言
共有6種 其餘輸出UNKNOWN (一律使用大寫)
輸入 # 時跳出
http://codepad.org/23dYbAua
這是我的程式碼 不管輸入甚麼都是UNKNOWN
我目前的理解是 字串最後會以\0做結尾
然後怕有殘值所以要用memset清空
請問我是對那裡不夠清楚造成我無法解題
可以的話請給我方向
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.217.210.147
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1547985401.A.F72.html
1F:推 Hurricaneger: break是啥意思? 01/20 20:10
2F:推 crazycy: C的字串(字元陣列)不能用==比較 請參見strcmp() 01/20 20:13
3F:推 v86861062: 應該要用字串比較的函數吧 strcmp 01/20 20:13
4F:→ jerryh001: 字串清空第一格放\0就好 然後printf不用\0應該是\n換行 01/20 20:16
那如果我用puts就要用\0嗎?
5F:→ idiont: 使用雙引號包起來的字串都會自動加上\0 不用自己加 01/20 20:52
6F:→ idiont: scanf讀進來的字串也會在結尾自動加上\0 01/20 20:54
7F:→ idiont: \0後面的內容不會有影響 所以也不必初始化char陣列 01/20 20:54
http://codepad.org/8d9o7wpk
結果還是錯= = 我到底哪裡做錯了 是指標那邊嗎 因為直接宣告他會要我加指標
※ 編輯: timmy999 (180.217.210.147), 01/20/2019 20:57:01
9F:推 a1u1usul3: strcmp相等的狀態會回傳0,造成他不會進入,要改成!str 01/20 21:18
10F:→ a1u1usul3: cmp()或者strcmp()==0 01/20 21:18
了解了 謝謝
※ 編輯: timmy999 (36.238.37.173), 01/20/2019 21:56:45
11F:推 dces4212: 提醒一下 ==只能比較字元 假如比較字串應該是未定義行 01/20 22:55
12F:→ dces4212: 為 然後a == 這邊的a是dereference出a[0] 01/20 22:55
13F:→ idiont: a的值是&a[0] 然後雙引號字串的值是字串的起始位置 01/21 00:05
14F:→ idiont: a是放在stack中 雙引號字串放在data section 所以他們的值 01/21 00:06
15F:→ idiont: 一定不一樣 01/21 00:06
16F:推 LPH66: 基本觀念: C 字串 = 以 \0 結束的字元陣列 01/21 08:40
17F:→ LPH66: 所以幾乎所有操作都是以整個陣列為主 01/21 08:40
18F:→ LPH66: 那因為運算子對陣列沒有定義, 故這些操作都不是使用運算子 01/21 08:41
19F:→ LPH66: 那既然是使用一系列函數來操作那就要仔細看函數的回傳值 01/21 08:42
20F:→ LPH66: strcmp 並不只比較等不等, 所以你需要把其結果和 0 比較 01/21 08:43
21F:推 LPH66: 另外不確定你們老師有沒有教, 不過請學著用 debugger 01/21 08:44
22F:→ LPH66: 有些東西用 debugger 可以容易知道問題在什麼地方 01/21 08:45
23F:推 dces4212: sor a不是dereference 說錯了 a[0]才是 01/21 18:35