2008-11-04 12 views

Antwort

6

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.

9

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

+0

Wenn MyFunction einen Zeiger zurück an den Aufrufer übergeben soll (wie im Beispiel), sollte das erste Argument unsigned char ** – Mathias

+2

Nein, er übergibt die Länge zurück.Der Puffer ist zugeordnet durch den Aufrufer und an die Funktion übergeben – paxdiablo

1

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

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

Der Autor fragt, wie viel Speicher char * Zeiger zugewiesen ist Ihre Null-terminierte Bedingung nicht aus –

-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

Wenn enthalten 0x0 falsche Länge ausgeben – user956584

1

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.

3

Es gibt keine Möglichkeit, die Größe (unsigned char *) zu finden, wenn sie nicht beendet ist null