[問題] C語言 function 傳 char 問題

看板C_and_CPP (C/C++)作者 (全力全壊)時間11年前 (2014/09/28 17:44), 11年前編輯推噓1(1019)
留言20則, 8人參與, 最新討論串1/1
原PO對C極度不熟 而且開發平台是arduino所以不知道和普通的C有沒有差別 主要是function傳char跟switch(char) 的問題 以下是code ************************ char command[10]; command[0]='a'; command[1]='b'; command[2]='c'; command[3]='\0'; SwitchCommand(command); void SwitchCommand(char *cmd){ Serial.println(cmd); switch(*cmd){ case 'abc': Serial.println("OK"); break; default: Serial.println("ERROR"); break; } } ************************************** 問題1: 如果使用過的char要清空,除了run for迴圈有更好的方法嗎? 目前是直接對byte覆蓋然後結尾加上\0,剩下的不管他 這樣是不會顯示之前的記錄沒錯(例如a,b,c,\0,e) 會顯示abc 如果command=''則會編不過 有辦法先進行清空嗎?還是其實大家都靠\0剩下不管他? 問題2: char command[10];的地方 有看過char *command;的宣告方式 然後function改成SwitchCommand(char **command) 這樣是不是長度不限制,對於傳function會有影響嗎? 照理說*command就是直接利用address溝通了吧 有點看不太懂**command.... 問題3(主要): Serial.println(cmd);的地方 可以正確輸出abc沒問題 但是switch(*cmd)的地方 無法進到case 'abc' 雖然後來知道原因 因為Serial.println(*cmd)只會輸出a 這表示case 要a才行 但是switch(cmd)又編不過 請問這部分該怎麼解決? 想要傳整個char進去,並且switch出正確的答案 **** 要把字串當陣列看待真的好麻煩啊QQ.... 而且還有指標的問題整個頭大... -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.42.123.237 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1411897498.A.45C.html

09/28 18:03, , 1F
建議原PO先去找C的書來看@@
09/28 18:03, 1F

09/28 19:56, , 2F
先弄懂 const *char="lovePtt"; char *string="lovePtt";
09/28 19:56, 2F

09/28 19:56, , 3F
const char[]="lovePtt";
09/28 19:56, 3F

09/28 20:00, , 4F
A1:清空 char array 可以用 memset()
09/28 20:00, 4F

09/28 20:01, , 5F
A2:原本的宣告方式就可以了 建議去找本 C 的書翻翻
09/28 20:01, 5F

09/28 20:03, , 6F
A3:要比較 char array,可用 memcmp or strncmp
09/28 20:03, 6F

09/28 20:05, , 7F
switch 其實可以改用 if else 搭配上面那兩個 func.
09/28 20:05, 7F

09/28 20:35, , 8F
非常感謝樓上各位,再繼續試試看
09/28 20:35, 8F

09/28 21:37, , 9F
單引號裡面塞超過一個字(汗)switch只能塞數字跟字元吧
09/28 21:37, 9F

09/28 21:39, , 10F
可以塞多個字喔 只是是implementation defined
09/28 21:39, 10F
感謝各位的回答 已經使用if+memcmp正確判斷了 現在有另一個問題是無法正確判斷sizeof 查了一下要判斷要素數量好像是要sizeof(array)/sizeof(array[0]) unsigned int data[50]; data[0]=123; data[1]=234; data[2]=345; data[3]='\0'; //不知道這一行有沒有用 結果 sizeof(data) 不管輸入都多少個int都是2 sizeof(data[0])也一樣是2 所以除出來永遠是1 memset(data,'\0',sizeof(data)); //同上,不知道這對int有沒有效果還是應該怎麼寫 不知道該怎麼解決 假設有一個 unsigned int data[100]; //預留了100個空位 但是只輸入了 0 1 2三個index的數字 要怎樣設定結尾呢? 目前是寫入的時候計算count 最後另外unsigned int data2[count]來處理 不知道這樣會不會很蠢= =..... ※ 編輯: KawasumiMai (114.42.123.237), 09/28/2014 23:20:17

09/28 23:36, , 11F
你把寫script的習慣帶進來了, C 沒有那麼多包裝好的方法
09/28 23:36, 11F

09/28 23:37, , 12F
很多東西都要自己來. 字串? 沒有, 請自己使用 array 搭
09/28 23:37, 12F

09/28 23:38, , 13F
配 \0 標記; 動態取得陣列長度? 沒有, 自己要下來
09/28 23:38, 13F

09/28 23:38, , 14F
^記
09/28 23:38, 14F

09/28 23:40, , 15F
把陣列傳進函式? 沒有, 只能自己傳指標和長度
09/28 23:40, 15F

09/28 23:41, , 16F
找本入門書就能回答你全部"不知道還是怎樣"的問題
09/28 23:41, 16F

09/28 23:51, , 17F
http://tinyurl.com/mv9acw6 看到這一篇了= =
09/28 23:51, 17F

09/29 00:07, , 18F
所以把長度自己記下來傳進函式就解決了...
09/29 00:07, 18F

09/29 00:45, , 19F
如果要儲存字串怎麼會宣告成 int []?
09/29 00:45, 19F

09/29 00:46, , 20F
字元陣列儲存字串的話有 strlen 可以算長度
09/29 00:46, 20F
文章代碼(AID): #1K9zYQHS (C_and_CPP)
文章代碼(AID): #1K9zYQHS (C_and_CPP)