将返回的指针重写为输出参数

时间:2009-12-06 19:45:40

标签: objective-c function pointers

我正在玩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 个答案:

答案 0 :(得分:2)

这取决于你如何处理内存分配。

-encryptTake1:返回什么?如果它返回一个新分配的缓冲区,调用者必须释放,那么你将在encryptTake2中使用unsigned char**

-(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");
    ...
}