2008-11-04 8 views
6

में अहस्ताक्षरित चार * की लंबाई को खोजने के लिए मैं एक चर डेटा की लंबाईकैसे सी

unsigned char* data = MyFunction(); 

कैसे खोजने के लिए?

+0

करता है अपने fn वापसी चार * आप हमें myfunction() पर कुछ और जानकारी देना होगा – yesraaj

+1

:। यह क्या करता है? क्या? वास्तव में यह क्या लौटाता है? –

उत्तर

6

इसकी एक string

length = strlen(char*); 

मान लिया जाये, लेकिन यह होना प्रतीत नहीं होता है ... इसलिए वहाँ एक रास्ता होने समारोह लंबाई लौट बिना नहीं है।

9

आपको डेटा की लंबाई MyFunction से वापस लेनी होगी। साथ ही, सुनिश्चित करें कि आप जानते हैं कि स्मृति को आवंटित कौन करता है और इसे इसे किसको रद्द करना है। इसके लिए कई पैटर्न हैं। अक्सर मैंने देखा है:

int MyFunction(unsigned char* data, size_t* datalen) 

फिर आप डेटा का आवंटन और में datalen पारित परिणाम (int) तो संकेत देना चाहिए कि अगर आपके बफर (डेटा) काफी लंबे समय से था ...

+0

यदि माईफंक्शन को कॉलर पर वापस पॉइंटर पास करना है (उदाहरण के रूप में), पहला तर्क हस्ताक्षर किए गए चार ** – Mathias

+2

नहीं होना चाहिए, तो वह लंबाई वापस ले रहा है। बफर आवंटित किया गया है कॉलर द्वारा और फ़ंक्शन को पास कर दिया गया। – paxdiablo

1

रूप strlen से पहले कहा। स्ट्रिंग्स में केवल काम करता है नल-टर्मिनेटेड इसलिए पहला 0 ('0' अक्षर) स्ट्रिंग के अंत को चिह्नित करेगा। आप इस तरह someting करने का बेहतर कर रहे हैं:

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

या

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

अब यह सच है कि मुश्किल नहीं है। आपको स्ट्रिंग के पहले अक्षर में पॉइंटर मिला है। जब तक आप शून्य मूल्य वाले चरित्र तक नहीं पहुंच जाते, तब तक आपको इस सूचक को बढ़ाने की आवश्यकता होती है। फिर आप मूल पॉइंटर और वॉयला से अंतिम सूचक को घटाते हैं जिसमें आपके पास स्ट्रिंग लम्बाई होती है।

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

लेखक पूछ रहा है कि चार * पॉइंटर को कितनी मेमोरी असाइन की गई है। आपकी शून्य-समाप्त स्थिति खड़ी नहीं है। –

-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

जब 0x0 होता है तो गलत लंबाई उत्पन्न होगी – user956584

1

मूल प्रश्न यह नहीं कहा है कि डेटा नहीं दिया एक अशक्त-समाप्त स्ट्रिंग है। यदि नहीं, तो यह जानने का कोई तरीका नहीं है कि डेटा कितना बड़ा है। यदि यह एक स्ट्रिंग है, तो स्ट्रेल का उपयोग करें या अपना खुद का लिखें। स्ट्रेल का उपयोग न करने का एकमात्र कारण यह है कि यदि यह होमवर्क समस्या है, तो मैं इसे आपके लिए वर्तनी नहीं दूंगा।

3

यदि इसे समाप्त अशक्त नहीं है unsigned char *) (आकार को खोजने के लिए कोई तरीका नहीं है