Mam zmiennąJak znaleźć długość niepodpisane char * w C
unsigned char* data = MyFunction();
jak znaleźć długość danych?
Mam zmiennąJak znaleźć długość niepodpisane char * w C
unsigned char* data = MyFunction();
jak znaleźć długość danych?
Zakładając jego string
length = strlen(char*);
ale nie wydaje się być ... więc nie jest sposobem bez konieczności funkcja zwróci długość.
Będziesz musiał przekazać długość danych z powrotem z MyFunction
. Upewnij się także, kto alokuje pamięć i kto musi ją zwolnić. Istnieją różne wzory tego. Dość często widziałem:
int MyFunction(unsigned char* data, size_t* datalen)
Następnie przydzielić dane i przekazać DataLen w wynik (int) należy wówczas wskazać, czy bufor (dane) było wystarczająco długo ...
Jak powiedział przed strlen. działa tylko w łańcuchach zakończonych NULL, więc pierwsze 0 ("\ 0") zaznaczy koniec ciągu. Lepiej robić cos takiego:
unsigned int size;
unsigned char* data = MyFunction(&size);
lub
unsigned char* data;
unsigned int size = MyFunction(data);
Teraz to naprawdę nie jest takie trudne. Masz wskaźnik do pierwszego znaku do ciągu znaków. Musisz zwiększyć ten wskaźnik, aż dotrzesz do postaci z wartością pustą. Następnie odejmujesz końcowy wskaźnik od oryginalnego wskaźnika i ustawiasz długość ciągu.
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 */
}
Autor pyta, ile pamięci jest przypisane do wskaźnika char * .Nakład zakończony znakiem null nie ma znaczenia –
#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
Gdy zawiera 0x0 będzie wyprowadzał błędną długość – user956584
Oryginalny pytanie nie powiedzieć, że dane zwracane jest ciąg zakończony zerem. Jeśli nie, nie ma sposobu, aby dowiedzieć się, jak duże są dane. Jeśli jest to ciąg, użyj strlen lub napisz własny. Jedynym powodem, dla którego nie należy używać strlen jest to, że jest to zadanie domowe, więc nie zamierzam ci tego wypowiadać.
Nie ma sposobu, aby znaleźć rozmiar (unsigned char *)
jeśli nie jest NULL zakończone
robi twój char powrót fn * – yesraaj
Trzeba będzie dać nam trochę więcej szczegółów na temat MyFunction(). Co prawda Dokładnie co to zwraca? –