3

我有一个结构:

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->message,但我仍然没有得到正确的地址或值。这是 IDE 的屏幕截图...我在调试器中做错了什么吗,因为它似乎应该可以工作。

在此处输入图像描述

4

3 回答 3

6

代替

logSimpleMessage(&lReceivedData->message, 1);

你这样说:

logSimpleMessage(lReceivedData->message, 1);
于 2012-11-04T02:30:29.453 回答
3
&lReceivedData->message

产生一个数组的地址。数组将在需要时衰减为指针,因此只需使用:

logSimpleMessage(lReceivedData->message, 1);

您不能真正将数组传递给函数,数组将始终衰减为指向第一个元素的指针。

于 2012-11-04T02:32:15.133 回答
2

您只需要传递lReceivedData->message给函数,删除&

logSimpleMessage(lReceivedData->message, 1);

当传递给函数时,一种类型char[]会衰减为一种。char*

于 2012-11-04T02:31:42.607 回答