2008-11-04 6 views

Répondre

6

En supposant un son string

length = strlen(char*); 

mais il ne semble pas être ... donc il n'y a pas un moyen sans ayant la fonction retourne la longueur.

9

Vous devrez repasser la longueur des données à MyFunction. Assurez-vous également de savoir qui attribue la mémoire et qui doit la libérer. Il existe différents modèles pour cela. Très souvent, je l'ai vu:

int MyFunction(unsigned char* data, size_t* datalen) 

Vous allouez ensuite les données et passer DataLen dans le résultat (int) devrait alors indiquer si votre tampon (données) est assez long ...

+0

Si MyFunction est supposé renvoyer un pointeur vers l'appelant (comme dans l'exemple), le premier argument doit être unsigned char ** – Mathias

+2

Non, il passe la longueur en arrière. par l'appelant et transmis à la fonction – paxdiablo

1

Comme dit précédemment strlen. ne fonctionne que dans les chaînes terminées par NULL, donc le premier 0 (caractère '\ 0') marquera la fin de la chaîne. Vous êtes mieux de faire someting comme ceci:

unsigned int size; 
unsigned char* data = MyFunction(&size); 

ou

unsigned char* data; 
unsigned int size = MyFunction(data); 
2

Maintenant, ce qui est vraiment pas difficile. Vous avez un pointeur sur le premier caractère de la chaîne. Vous devez incrémenter ce pointeur jusqu'à ce que vous atteigniez un caractère avec une valeur nulle. Vous soustrayez ensuite le pointeur final du pointeur d'origine et voila vous avez la longueur de la chaîne.

int strlen(unsigned char *string_start) 
{ 
    /* Initialize a unsigned char pointer here */ 
    /* A loop that starts at string_start and 
    * is increment by one until it's value is zero, 
    *e.g. while(*s!=0) or just simply while(*s) */ 
    /* Return the difference of the incremented pointer and the original pointer */ 
} 
+1

L'auteur demande combien de mémoire est affectée au pointeur char * Votre condition à terminaison nulle ne se trouve pas –

-5
#include <stdio.h> 
#include <limits.h> 
int lengthOfU(unsigned char * str) 
{ 
    int i = 0; 

    while(*(str++)){ 
     i++; 
     if(i == INT_MAX) 
      return -1; 
    } 

    return i; 
} 

HTH

+0

Lorsque contenir 0x0 va produire une longueur incorrecte – user956584

1

La question originale n'a pas dit que les données renvoyées est une chaîne terminée par zéro. Sinon, il n'y a aucun moyen de connaître la taille des données. Si c'est une chaîne, utilisez strlen ou écrivez la vôtre. La seule raison de ne pas utiliser strlen est si c'est un problème de devoirs, donc je ne vais pas l'épeler pour vous.

3

Il n'y a aucun moyen de trouver la taille (unsigned char *) si elle est

Questions connexes