【发布时间】:2021-03-25 14:53:10
【问题描述】:
我通过做微控制器项目自学 C++。我目前的项目是使用一对或 Adafruit Feather 数据包无线电。无线电数据包的库函数需要一个 C 风格的字符串(我相信),我理解它是一个字符数组。
我已经设置了一个枚举来反映接收器的各种操作,并希望将该状态发送回发送器。所以我想把一个枚举变成一个字符数组。
在谷歌搜索将枚举转换为字符数组的方法中,最简单的(对我来说理解)是将枚举变量传递给一个带有 switch 语句的函数,该语句将返回一个字符字符串。但是当我尝试将返回值放入我的 char 数组时,我收到错误“从 'char*' 到 'char' [-fpermisive] 的无效转换”。我也一直在努力理解数组和指向数组的指针,这在我的脑海中仍然很模糊。
这是我的代码的一些 sn-ps,我希望它们能充分展示我正在尝试做的事情。
...来自我的主要功能
BLINKING_RIGHT, //0
BLINKING_LEFT, //1
FLASHING, //2
SHOWING_BATTERY,//3
NONE //4
};
...以及处理要发送的枚举的两个函数
void SendStatus()
{
char data[20] {EnumToString(currentAction)}; //This is the line showing the error
//itoa (data,static_cast<int>(currentAction),10);
//data[0]=static_cast<uint8_t>(currentAction);
//data[1]=0;
rf69.send(data, sizeof(data));
rf69.waitPacketSent();
Serial.println("Sent a reply");
}//end_function SendStatus()
char* EnumToString(CurrentAction inputEnum)
{
char *statusString;
switch(inputEnum)
{
case 0:
statusString = "BLINKING_RIGHT"; //0
return statusString;
break;
case 1:
statusString = "BLINKING_LEFT"; //1
return statusString;
break;
case 2:
statusString = "FLASHING"; //2
return statusString;
break;
case 3:
statusString = "SHOWING_BATTERY";//3
case 4:
statusString = "NONE"; //4
return statusString;
break;
default:
return "EnumToString: Invalid enum";
}
}
我想帮助解决这个问题,更重要的是,帮助理解 char* 类型和 char 类型之间的区别。
【问题讨论】:
-
关键是知道
*的含义。您正试图返回一个指向字符的指针,但这也行不通。这是因为您的指针应该指向的“事物”不再存在。输出参数会更好。 -
要了解char和char指针的区别,请阅读stackoverflow.com/questions/10186765/… and and stackoverflow.com/questions/5727/…
-
有一百万个关于 C++ 及其类型的教程和资源。请阅读其中任何一个。如果您不知道 char 和 char* 之间的区别,那么您研究 C++ 指针的时间不会超过 5 分钟。请珍惜我们的时间。
-
为什么在每个
return之后都放一个break?它完全是多余的,任何好的编译器都会警告你它是死代码。