[問題] 對字串的理解

看板C_and_CPP作者 (憤怒a阿宅)時間5年前 (2019/01/20 19:56), 5年前編輯推噓10(10014)
留言24則, 10人參與, 5年前最新討論串1/1
大一 有一題題目問道 輸入一種語言的你好 並輸出他是哪種語言 共有6種 其餘輸出UNKNOWN (一律使用大寫) 輸入 # 時跳出 http://codepad.org/23dYbAua 這是我的程式碼 不管輸入甚麼都是UNKNOWN 我目前的理解是 字串最後會以\0做結尾 然後怕有殘值所以要用memset清空 請問我是對那裡不夠清楚造成我無法解題 可以的話請給我方向 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.217.210.147 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1547985401.A.F72.html

01/20 20:10, 5年前 , 1F
break是啥意思?
01/20 20:10, 1F

01/20 20:13, 5年前 , 2F
C的字串(字元陣列)不能用==比較 請參見strcmp()
01/20 20:13, 2F

01/20 20:13, 5年前 , 3F
應該要用字串比較的函數吧 strcmp
01/20 20:13, 3F

01/20 20:16, 5年前 , 4F
字串清空第一格放\0就好 然後printf不用\0應該是\n換行
01/20 20:16, 4F
那如果我用puts就要用\0嗎?

01/20 20:52, 5年前 , 5F
使用雙引號包起來的字串都會自動加上\0 不用自己加
01/20 20:52, 5F

01/20 20:54, 5年前 , 6F
scanf讀進來的字串也會在結尾自動加上\0
01/20 20:54, 6F

01/20 20:54, 5年前 , 7F
\0後面的內容不會有影響 所以也不必初始化char陣列
01/20 20:54, 7F
http://codepad.org/8d9o7wpk 結果還是錯= = 我到底哪裡做錯了 是指標那邊嗎 因為直接宣告他會要我加指標 ※ 編輯: timmy999 (180.217.210.147), 01/20/2019 20:57:01

01/20 21:11, 5年前 , 8F
https://pastebin.com/N3npZGy1 你要這個效果嗎?
01/20 21:11, 8F

01/20 21:18, 5年前 , 9F
strcmp相等的狀態會回傳0,造成他不會進入,要改成!str
01/20 21:18, 9F

01/20 21:18, 5年前 , 10F
cmp()或者strcmp()==0
01/20 21:18, 10F
了解了 謝謝 ※ 編輯: timmy999 (36.238.37.173), 01/20/2019 21:56:45

01/20 22:55, 5年前 , 11F
提醒一下 ==只能比較字元 假如比較字串應該是未定義行
01/20 22:55, 11F

01/20 22:55, 5年前 , 12F
為 然後a == 這邊的a是dereference出a[0]
01/20 22:55, 12F

01/21 00:05, 5年前 , 13F
a的值是&a[0] 然後雙引號字串的值是字串的起始位置
01/21 00:05, 13F

01/21 00:06, 5年前 , 14F
a是放在stack中 雙引號字串放在data section 所以他們的值
01/21 00:06, 14F

01/21 00:06, 5年前 , 15F
一定不一樣
01/21 00:06, 15F

01/21 08:40, 5年前 , 16F
基本觀念: C 字串 = 以 \0 結束的字元陣列
01/21 08:40, 16F

01/21 08:40, 5年前 , 17F
所以幾乎所有操作都是以整個陣列為主
01/21 08:40, 17F

01/21 08:41, 5年前 , 18F
那因為運算子對陣列沒有定義, 故這些操作都不是使用運算子
01/21 08:41, 18F

01/21 08:42, 5年前 , 19F
那既然是使用一系列函數來操作那就要仔細看函數的回傳值
01/21 08:42, 19F

01/21 08:43, 5年前 , 20F
strcmp 並不只比較等不等, 所以你需要把其結果和 0 比較
01/21 08:43, 20F

01/21 08:44, 5年前 , 21F
另外不確定你們老師有沒有教, 不過請學著用 debugger
01/21 08:44, 21F

01/21 08:45, 5年前 , 22F
有些東西用 debugger 可以容易知道問題在什麼地方
01/21 08:45, 22F

01/21 18:35, 5年前 , 23F
sor a不是dereference 說錯了 a[0]才是
01/21 18:35, 23F

01/24 03:00, 5年前 , 24F
文章代碼(AID): #1SH67vzo (C_and_CPP)