2008-11-04 14 views

Odpowiedz

6

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ść.

9

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 ...

+0

Jeśli funkcja MyFunction ma przekazać wskaźnik do wywołującego (jak w przykładzie), pierwszy argument powinien być niepodpisany char ** – Mathias

+2

Nie, on przekazuje długość wstecz. przez wywołującego i przekazany do funkcji – paxdiablo

1

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); 
2

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

Autor pyta, ile pamięci jest przypisane do wskaźnika char * .Nakład zakończony znakiem null nie ma znaczenia –

-5
#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

+0

Gdy zawiera 0x0 będzie wyprowadzał błędną długość – user956584

1

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ć.

3

Nie ma sposobu, aby znaleźć rozmiar (unsigned char *) jeśli nie jest NULL zakończone