Переписать возвращенный указатель на выходной параметр - PullRequest
0 голосов
/ 06 декабря 2009

Я играю с библиотекой 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 в методе. Как?

1 Ответ

2 голосов
/ 06 декабря 2009

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

Что возвращает -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");
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...