2015-11-01 32 views
0

我有一個純粹的c代碼和由ObjC編譯器處理的c代碼的項目[.m file]。一個由ObjC編譯器處理具有下面的類:將字符數組從ObjC傳遞到C

unsigned long getMessage(char ** message) { 
*message = (char*)calloc(1, [dMessage bytes], [dMessage length]); 
memcpy(message, [dMessage bytes], [dMessage length]) 
return [dMessage length]; 
} 

dMessage是填充有文本的NSData對象。

在C面,我做的:

char* msg = NULL 
unsigned long length = getMessage(&msg) 

通話結束後,msg是空的,但長度變量設置爲正確的大小。

我該怎麼做才能在objc和c之間通過char*

謝謝

+0

什麼是'getMessage'真的這樣做?數據已經分配在'NSData'對象中,所以只需保留它並通過'[dMessage bytes]'訪問原始字節。 – trojanfoe

+0

這是一個用C語言編寫的函數,用於訪問存儲在數據庫中的一些數據,這些數據用於訪問我們的ObjC庫和代碼。我必須將它傳遞給使用純C編寫的庫,我不想更改該庫,希望儘可能保持原始。 – Krystian

回答

0

這是我的代碼錯誤。

我應該havecalled的

memcpy(*message, [dMessage bytes], [dMessage length])

代替

memcpy(message, [dMessage bytes], [dMessage length])

1

你傳遞了​​錯誤的參數calloc()。它需要兩個參數,但你傳遞三個參數。編譯器應該就此向您大聲尖叫。

由於第二個參數是來自NSDatabytes指針,您實際上正在請求一些巨大的分配。這可能是失敗的。通常會向控制檯記錄有關該故障的消息。

你想:

*message = (char*)calloc([dMessage length], 1); 
+0

嗯不,沒有消息,代碼編譯和「運行」,但不起作用。你提出的代碼並沒有解決它。 – Krystian