2009-12-06 5 views
0

Je suis en train de jouer avec la bibliothèque openSSL et cela me demande de rafraîchir les pointeurs, et j'ai des difficultés.Réécriture d'un pointeur renvoyé vers un paramètre de sortie

I ont une méthode objective-c:

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

Il faut des données, elle crypte et renvoie un pointeur sur les données et la longueur des données en tant que paramètre de sortie.

Je souhaite modifier cela afin que les données chiffrées soient également traitées en tant que paramètre de sortie et que la valeur de retour soit utilisée pour indiquer le succès ou l'échec. C'est ce que j'ai:

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

Cela ne fonctionne pas. Qu'est-ce que je fais mal? Je pense que le problème est que (unsigned char *) est le mauvais. Si (unsigned char *) est faux alors je présume que je devrai aussi changer comment output est référencé dans la méthode. Comment?

Répondre

2

Cela dépend de la façon dont vous gérez l'allocation de mémoire.

Que retourne -encryptTake1:? Si elle retourne un tampon nouvellement alloué que l'appelant doit libérer alors vous utiliseriez unsigned char** dans 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

Merci - c'est fait! Je devenais confus avec mes '&' et '*' dans la fonction d'appel aussi. Dans la fonction appel, var est défini comme 'unsigned char *' et est précédé d'un '&' dans l'appel de la fonction. Dans 'encryptTake2:' toutes les références à var sont précédées de '*'. J'ai besoin de relire le chapitre 5 du livre C. –

Questions connexes