2009-12-06 2 views
0

Я играю с библиотекой openSSL, и мне нужно, чтобы я расчесывал указатели, и у меня возникают трудности.Переписывание возвращаемого указателя на выходной параметр

У меня есть метод Objective-C:

-(unsigned char *)encryptTake1:(unsigned char *)input inputLength:(int)inLen outputLength:(int*)outLen; 

Это принимает некоторые данные, шифрует его и возвращает указатель на данные и длину данных в качестве выходного параметра.

Я хочу изменить это, чтобы зашифрованные данные также обрабатывались как выходной параметр, а возвращаемое значение используется для указания успеха или отказа. Это то, что у меня есть:

-(int)encryptTake2:(unsigned char *)input inputLength:(int)inLen output:(unsigned char *)output outputLength:(int*)outLen; 

Это не работает. Что я делаю не так? Я думаю, проблема в том, что (unsigned char *) является неправильным. Если (unsigned char *) ошибочно, я полагаю, что мне также нужно будет изменить способ ссылки на output в рамках метода. Как?

ответ

2

Это зависит от того, как вы занимаетесь распределением памяти.

Что делает -encryptTake1: возвращение? Если она возвращает вновь выделенный буфер, вызывающий должен освободить, то вы бы использовать unsigned char** в encryptTake2:

-(int)encryptTake2:(unsigned char *)input inputLength:(int)inLen output:(unsigned char **)outputPtr outputLength:(int*)outLen 
{ 
    *outputPtr = malloc(1024); 
    unsigned char* output = *outputPtr; 
    strcpy(output, "hello"); 
    ... 
} 
+0

спасибо - что сделал это! Я тоже путался с моими '&' и '*' в вызывающей функции. В вызывающей функции var определяется как «unsigned char *» и префикс «&» в вызове функции. Внутри encryptTake2: 'все ссылки на var имеют префикс' * '. Мне нужно перечитать главу 5 книги C. –

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