[问题] 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