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

作者: KawasumiMai (さあ、死ぬがいい)   2014-09-28 17:44:53
原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....
而且還有指標的問題整個頭大...
作者: tjjh89017 (伊達政宗)   2014-09-28 18:03:00
建議原PO先去找C的書來看@@
作者: Sex5F (HTC)   2014-09-28 19:56:00
先弄懂 const *char="lovePtt"; char *string="lovePtt";const char[]="lovePtt";
作者: peder (嗶一聲之後)   2014-09-28 20:00:00
A1:清空 char array 可以用 memset()A2:原本的宣告方式就可以了 建議去找本 C 的書翻翻A3:要比較 char array,可用 memcmp or strncmpswitch 其實可以改用 if else 搭配上面那兩個 func.
作者: KawasumiMai (さあ、死ぬがいい)   2014-09-28 20:35:00
非常感謝樓上各位,再繼續試試看
作者: a27417332 (等號卡比)   2014-09-28 21:37:00
單引號裡面塞超過一個字(汗)switch只能塞數字跟字元吧
作者: azureblaze (AzureBlaze)   2014-09-28 21:39:00
可以塞多個字喔 只是是implementation defined
作者: bibo9901 (function(){})()   2014-09-28 23:36:00
你把寫script的習慣帶進來了, C 沒有那麼多包裝好的方法很多東西都要自己來. 字串? 沒有, 請自己使用 array 搭配 \0 標記; 動態取得陣列長度? 沒有, 自己要下來^記把陣列傳進函式? 沒有, 只能自己傳指標和長度找本入門書就能回答你全部"不知道還是怎樣"的問題
作者: KawasumiMai (さあ、死ぬがいい)   2014-09-28 23:51:00
http://tinyurl.com/mv9acw6 看到這一篇了= =所以把長度自己記下來傳進函式就解決了...
作者: PoorLoser (廢文製造機)   2014-09-29 00:45:00
如果要儲存字串怎麼會宣告成 int []?字元陣列儲存字串的話有 strlen 可以算長度

Links booklink

Contact Us: admin [ a t ] ucptt.com