tipos lenguaje leer imprimir formato especificadores datos caracteres cadenas cadena arreglo c char

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



tipos de datos en c (7)

Tengo una variable

unsigned char* data = MyFunction();

cómo encontrar la longitud de los datos?


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 */ }


Como se dijo antes, strlen solo funciona en cadenas terminadas en NULL, por lo que el primer 0 (''/ 0'' caracter) marcará el final de la cadena. Es mejor que hagas algo así:

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

o

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


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.


Tendrá que 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 ...


#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


No hay forma de encontrar el tamaño de ( unsigned char *) si no tiene terminación nula.


Asumiendo que es una string

length = strlen( char* );

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