Ich habe eine VariableWie die Länge von unsigned char * finden in C
unsigned char* data = MyFunction();
wie die Länge der Daten zu finden?
Ich habe eine VariableWie die Länge von unsigned char * finden in C
unsigned char* data = MyFunction();
wie die Länge der Daten zu finden?
Unter der Annahme, sein ein string
length = strlen(char*);
aber es scheint nicht zu sein ... so gibt es keine Möglichkeit, ohne mit der Funktion der Länge zurück.
Sie müssen die Länge der Daten von MyFunction
zurückgeben. Stellen Sie außerdem sicher, dass Sie wissen, wer den Speicher zuweist und wer die Zuordnung aufheben muss. Dafür gibt es verschiedene Muster. Sehr oft habe ich gesehen:
int MyFunction(unsigned char* data, size_t* datalen)
Sie dann Daten zuordnen und in datalen Pass Das Ergebnis (int) sollten dann angeben, ob Ihre Puffer (Daten) war lange genug ...
Wie gesagt Strlen. funktioniert nur in Strings NULL-terminiert, so dass die erste 0 ('\ 0' Zeichen) das Ende der Zeichenkette markiert. Sie sind besser von someting wie dies zu tun:
unsigned int size;
unsigned char* data = MyFunction(&size);
oder
unsigned char* data;
unsigned int size = MyFunction(data);
Nun ist diese wirklich nicht so schwer ist. Sie haben einen Zeiger auf das erste Zeichen der Zeichenfolge erhalten. Sie müssen diesen Zeiger inkrementieren, bis Sie ein Zeichen mit Nullwert erreichen. Dann subtrahieren Sie den letzten Zeiger vom ursprünglichen Zeiger und voila haben Sie die String-Länge.
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 */
}
Der Autor fragt, wie viel Speicher char * Zeiger zugewiesen ist Ihre Null-terminierte Bedingung nicht aus –
#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
Wenn enthalten 0x0 falsche Länge ausgeben – user956584
Die ursprüngliche Frage nicht sagen, dass die zurückgegebenen Daten ein nullterminierten String ist. Wenn nicht, gibt es keine Möglichkeit zu wissen, wie groß die Daten sind. Wenn es eine Zeichenfolge ist, verwenden Sie strlen oder schreiben Sie Ihre eigenen. Der einzige Grund, Strlen nicht zu benutzen, ist, wenn das ein Hausaufgabenproblem ist, also werde ich es nicht für dich buchstabieren.
Es gibt keine Möglichkeit, die Größe (unsigned char *)
zu finden, wenn sie nicht beendet ist null
tut Ihre fn Rückkehr char * – yesraaj
Sie haben uns auf MyFunction einige weitere Details geben (.):? Was sie tut, Genau was liefert es? –