Como encontrar o comprimento de unsigned char * em C

Eu tenho uma variável

unsigned char* data = MyFunction();

como encontrar o tamanho dos dados?

0
o seu fn retorna char *?
adicionado o autor yesraaj, fonte
Você terá que nos dar mais alguns detalhes sobre MyFunction (): O que ele faz? Exatamente o que isso retorna?
adicionado o autor Rasmus Faber, fonte

6 Respostas

Você terá que passar o comprimento dos dados de volta de MyFunction . Além disso, certifique-se de saber quem aloca a memória e quem deve desalocá-la. Existem vários padrões para isso. Muitas vezes tenho visto:

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

Em seguida, você aloca os dados e envia os dados. O resultado (int) deve indicar se o seu buffer (dados) foi longo o suficiente ...

0
adicionado
Não, ele está passando o tempo de volta. O buffer é alocado pelo chamador e passado para a função.
adicionado o autor paxdiablo, fonte
Se MyFunction é suposto passar um ponteiro de volta para o chamador (como no exemplo), o primeiro argumento deve ser unsigned char **
adicionado o autor Mathias, fonte

Agora isso não é tão difícil assim. Você tem um ponteiro para o primeiro caractere da string. Você precisa incrementar esse ponteiro até chegar a um caractere com valor nulo. Você então subtrai o ponteiro final do ponteiro original e voila você tem o tamanho da string.

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 */
}
0
adicionado
O autor está perguntando quanta memória é atribuída ao char * pointer. Sua condição de terminação nula não é válida.
adicionado o autor Peter Lee, fonte
#include 
#include   
int lengthOfU(unsigned char * str)
{
    int i = 0;

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

    return i;
}

HTH

0
adicionado
Quando contém 0x0 irá produzir comprimento errado
adicionado o autor user956584, fonte

Assuming its a string

length = strlen( char* );

mas não parece ser ... então não há uma maneira sem ter a função retornar o comprimento.

0
adicionado

A pergunta original não disse que os dados retornados são uma cadeia terminada com nulo. Caso contrário, não há como saber o tamanho dos dados. Se for uma string, use o strlen ou escreva o seu próprio. A única razão para não usar o strlen é se este é um problema de lição de casa, então eu não vou soletrar para você.

0
adicionado

Não há como encontrar o tamanho de ( unsigned char *) se ele não for terminado em null.

0
adicionado