我有一个带有纯c代码的项目和由ObjC编译器[.m file
]处理的c代码。由ObjC编译器处理的那个有以下类:
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 :(得分:1)
您将错误的参数传递给calloc()
。它需要两个参数,但你已经过了三个。编译器应该尖叫着你。
由于第二个参数是来自bytes
的{{1}}指针,因此您有效地请求了一些巨大的分配。它可能失败了。通常会在控制台上记录有关该失败的消息。
你想:
NSData
答案 1 :(得分:0)
我的代码出了问题。
我应该叫做
memcpy(*message, [dMessage bytes], [dMessage length])
而不是
memcpy(message, [dMessage bytes], [dMessage length])