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 に答える