我试图了解如何拆分数组并在if语句中使用标记,但是我没有太多运气。
以下代码适用于Arduino。我正在做的是传递函数receviedChars,它将是:
token0,TOKEN1,token2
当我打印出func时,它会读出c
,所以我想如果我将func与c
进行比较,它应该匹配true。不幸的是,这似乎不会发生。
我对C ++和Arduino很陌生,主要有网络开发背景,所以我可能会误解一些东西
const byte numChars = 32;
char receivedChars[numChars];
char *chars_array = strtok(receivedChars, ",");
char *func = chars_array;
Serial.println(func);
if(func == 'c') {
Serial.println("It works");
}
有人可以帮助我解决我出错的地方吗?
答案 0 :(得分:2)
首先,strtok迭代地工作。这意味着要将字符串拆分为标记,您必须调用它直到它返回NULL:
char* token = strtok(input, ",");
while (token)
{
...
token = strtok(NULL, ",");
}
第二件要知道的是,char *只是一个指向被视为字符串的内存块的指针。所以当你写下这样的东西时:
char* str = ...;
if (str == 'c')
{
...
}
这实际上意味着“将变量'str'指向的地址与字符'c'的ASCII码(十六进制为0x63)的值进行比较”,因此如果strtok返回的指针等于你的条件将为真到0x63,这绝对不是你想要的。
你真正需要的是strcmp函数,它按字符比较两块内存:
char* chars_array = strtok(receivedChars, ",");
if (strcmp(chars_array, "bla") == 0)
{
// a first token is "bla"
}
答案 1 :(得分:1)
交换
if(func == 'c') {
到
if(func[0] == 'c') {
如果你想检查第一个字符是否是&#39; <&#39;
答案 2 :(得分:0)
&#39; FUNC&#39;是指向字符数组开头的指针;将它与字符值进行比较几乎不会产生真实。也许您想要比较该数组中的字符。
答案 3 :(得分:0)
主要问题是您应该使用if(*func == 'c') {
,即取消引用指针func
,而不是if(func == 'c') {
。
请注意,您还应该考虑chars_array
可能是空字符串,或者可能只包含','
个字符;在这种情况下,strtok
会产生NULL
,并可能会让您的应用崩溃。因此,代码应如下所示:
if (func != nullptr) {
Serial.println(func);
if(*func == 'c') {
Serial.println("It works");
}
}