Cómo encontrar la longitud de char * sin signo en C

Tengo una variable

unsigned char* data = MyFunction();

cómo encontrar la longitud de los datos?

0
¿tu fn devuelve char *?
agregado el autor yesraaj, fuente
Tendrás que darnos más detalles sobre MyFunction (): ¿Qué hace? Exactamente, ¿qué devuelve?
agregado el autor Rasmus Faber, fuente

6 Respuestas

Tendrá que volver a pasar la longitud de los datos desde MyFunction . Además, asegúrese de saber quién asigna la memoria y quién debe desasignarla. Hay varios patrones para esto. Muy a menudo he visto:

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

A continuación, asigne datos y pase datalen in. El resultado (int) debería indicar si su buffer (data) fue lo suficientemente largo ...

0
agregado
No, él está pasando el largo de vuelta. El intermediario asigna el almacenamiento intermedio y lo pasa a la función.
agregado el autor paxdiablo, fuente
Si MyFunction se supone que debe pasar un puntero a la persona que llama (como en el ejemplo), el primer argumento debe ser unsigned char **
agregado el autor Mathias, fuente

Ahora esto realmente no es tan difícil. Tienes un puntero al primer personaje de la cadena. Necesita incrementar este puntero hasta que llegue a un personaje con valor nulo. Luego resta el puntero final del puntero original y siempre que tenga la longitud de la cadena.

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
agregado
El autor pregunta cuánta memoria está asignada al puntero char *. Su condición de terminación nula no se sostiene.
agregado el autor Peter Lee, fuente
#include 
#include   
int lengthOfU(unsigned char * str)
{
    int i = 0;

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

    return i;
}

HTH

0
agregado
Cuando contiene 0x0 dará salida a la longitud incorrecta
agregado el autor user956584, fuente

Assuming its a string

length = strlen( char* );

pero no parece ser ... así que no hay una forma sin que la función devuelva la longitud.

0
agregado

La pregunta original no dice que los datos devueltos sean una cadena terminada en nulo. Si no, no hay forma de saber qué tan grande es la información. Si es una cadena, use strlen o escriba la suya. La única razón para no usar strlen es si este es un problema de tarea, así que no voy a explicarlo por ti.

0
agregado

No hay forma de encontrar el tamaño de ( unsigned char *) si no está terminado en nulo.

0
agregado