2015-11-01 3 views
0

У меня есть проект с чистым кодом c и кодом c, обработанным компилятором ObjC [.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 объект заполнен текстом.

На стороне С, я:

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

После вызова msg пусто, но переменная длина устанавливается для корректировки размера.

Что мне делать, чтобы пройти char* между objc и c?

Спасибо

+0

Что такое 'getMessage' действительно делает? Данные уже выделены в объекте «NSData», поэтому просто держите его и получите доступ к необработанным байтам через '[dMessage bytes]'. – trojanfoe

+0

Это функция, написанная на C, доступ к некоторым данным, которые хранятся в базе данных, к которой я обращаюсь к библиотеке ObzC и коду. Я должен передать его в библиотеку, написанную на чистом C, и я не хочу менять эту библиотеку, хочу, чтобы она была как можно ближе к оригиналу. – Krystian

ответ

0

Это была ошибка в моем коде.

я havecalled

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

вместо

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

1

можно передать неправильные аргументы calloc(). Он принимает два аргумента, но вы проходите три. Компилятор должен кричать на вас об этом.

Поскольку второй аргумент является указателем bytes от NSData, вы фактически запрашиваете огромное выделение. Вероятно, это не так. Как правило, сообщение об этом сбое регистрируется в консоли.

Вы хотите:

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

Хмм нет, нет сообщений, компиляция кода и «работает», но не работает. Код, который вы предложили, не разрешил. – Krystian

Смежные вопросы