我有一个结构:
typedef struct {
LogLevel level;
char message[255];
} LogMessage;
然后我有一个函数接收指向LogMessage结构的指针,并且需要调用一个接收char *的函数:
xStatus = xQueueReceive(xQueueHandleGSMSend, &lReceivedData, portMAX_DELAY);
if(xStatus == pdPASS)
{
logSimpleMessage(&lReceivedData->message, 1);
}
这是logSimpleMessage函数的原型:
void logSimpleMessage(const char * message, int level);
当我尝试用上面的代码调用它时,我没有得到消息的正确地址(或内容)。如何获取指向lReceivedData消息的char *?
编辑:我试图按照建议使用lReceivedData->消息,但我仍然没有获得正确的地址或值。这是IDE的屏幕上限...我在调试器中做了一些非常错误的事情,因为它似乎应该可以工作。
答案 0 :(得分:6)
而不是
logSimpleMessage(&lReceivedData->message, 1);
你这么说:
logSimpleMessage(lReceivedData->message, 1);
答案 1 :(得分:3)
&lReceivedData->message
生成数组的地址。数组将在需要时衰减为指针,因此只需使用:
logSimpleMessage(lReceivedData->message, 1);
你无法真正将一个数组传递给一个函数,该数组总是会衰减为指向第一个元素的指针。
答案 2 :(得分:2)
您只需将lReceivedData->message
传递给该功能,即可移除&
:
logSimpleMessage(lReceivedData->message, 1);
传递给函数时,char[]
类型会衰减为char*
。