[問題] 對字串的理解

作者: timmy999 (憤怒a阿宅)   2019-01-20 19:56:36
大一 有一題題目問道
輸入一種語言的你好 並輸出他是哪種語言
共有6種 其餘輸出UNKNOWN (一律使用大寫)
輸入 # 時跳出
http://codepad.org/23dYbAua
這是我的程式碼 不管輸入甚麼都是UNKNOWN
我目前的理解是 字串最後會以\0做結尾
然後怕有殘值所以要用memset清空
請問我是對那裡不夠清楚造成我無法解題
可以的話請給我方向
作者: Hurricaneger (褲襪脫落大尉)   2019-01-20 20:10:00
break是啥意思?
作者: crazycy (LCY)   2019-01-20 20:13:00
C的字串(字元陣列)不能用==比較 請參見strcmp()
作者: v86861062 (數字人:3)   2019-01-20 20:13:00
應該要用字串比較的函數吧 strcmp
作者: jerryh001   2019-01-20 20:16:00
字串清空第一格放\0就好 然後printf不用\0應該是\n換行
作者: idiont (supertroller)   2019-01-20 20:52:00
使用雙引號包起來的字串都會自動加上\0 不用自己加scanf讀進來的字串也會在結尾自動加上\0\0後面的內容不會有影響 所以也不必初始化char陣列
作者: Neisseria (Neisseria)   2019-01-20 21:11:00
https://pastebin.com/N3npZGy1 你要這個效果嗎?
作者: a1u1usul3 (Q-Max)   2019-01-20 21:18:00
strcmp相等的狀態會回傳0,造成他不會進入,要改成!strcmp()或者strcmp()==0
作者: dces4212 (flawless)   2019-01-20 22:55:00
提醒一下 ==只能比較字元 假如比較字串應該是未定義行為 然後a == 這邊的a是dereference出a[0]
作者: idiont (supertroller)   2019-01-21 00:05:00
a的值是&a[0] 然後雙引號字串的值是字串的起始位置a是放在stack中 雙引號字串放在data section 所以他們的值一定不一樣
作者: LPH66 (-6.2598534e+18f)   2019-01-21 08:40:00
基本觀念: C 字串 = 以 \0 結束的字元陣列所以幾乎所有操作都是以整個陣列為主那因為運算子對陣列沒有定義, 故這些操作都不是使用運算子那既然是使用一系列函數來操作那就要仔細看函數的回傳值strcmp 並不只比較等不等, 所以你需要把其結果和 0 比較另外不確定你們老師有沒有教, 不過請學著用 debugger有些東西用 debugger 可以容易知道問題在什麼地方
作者: dces4212 (flawless)   2019-01-21 18:35:00
sor a不是dereference 說錯了 a[0]才是
作者: jxzhe   2019-01-24 03:00:00

Links booklink

Contact Us: admin [ a t ] ucptt.com