我正在玩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
的方式。怎么样?
答案 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");
...
}