2012-11-04 33 views
3

的部件I具有這樣的結構:字符* []結構

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的屏幕截圖......我在調試器中做了一些非常錯誤的事情,因爲它看起來好像應該起作用。

enter image description here

+0

您期待的價值是什麼?我可以在調試器中看到消息字符串是「Check Stack Status」。什麼是打印/顯示在logSimpleMessage()中? – Neo

回答

6

代替

logSimpleMessage(&lReceivedData->message, 1); 

你把這麼:

logSimpleMessage(lReceivedData->message, 1); 
+0

我已經試過這個,並附上截圖到結果的問題,我仍然得到一個不同的地址。您的照片中的 – Crake

+0

我沒有看到該郵件的地址。我只看到消息 – alinsoar

+0

的內容,您確定要通過引用傳遞結構的地址,而不是重複的指針嗎? – alinsoar

2

您只需要通過lReceivedData->message的功能,刪除&

logSimpleMessage(lReceivedData->message, 1); 

當傳遞給函數時,char[]的一種類型衰減到char*

+0

我已經更新了這個問題,並嘗試了這個結果 – Crake

+2

@Crake:我不確定你想要在圖像中顯示的問題是什麼,但這是你如何傳遞'char []'到一個期望'char *'的函數。代碼中的其他地方一定存在問題,導致數組不能以您期望的值設置。 – AusCBloke

3
&lReceivedData->message 

產生一個數組的地址。在需要時數組會衰減到一個指針,所以只需使用:

logSimpleMessage(lReceivedData->message, 1); 

你不能真正傳遞數組給一個函數,陣列將一直腐爛的指針的第一個元素。

+0

查看我編輯的問題 – Crake

+1

@Crake:究竟是什麼「不正確」呢?當你將它作爲參數傳遞時,會創建一個指針。 *指針本身*當然會有自己的地址,但它會指向數組的第一個元素。 –

+0

我想我在查看調試器時認爲我傳遞的是實際地址,而不是指向該地址的新指針。指針的值(在屏幕截圖中,在變量窗口中,「testMessage」是函數中的指針)是否是數組的第一個元素的地址?在屏幕截圖中,我想可能是調試器向我顯示了指針的地址,然後向我顯示了消息指針位置中的實際內存值,而不是能夠看到消息的地址。這給了我很好的洞察力,向前邁進,謝謝。 – Crake