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

मेरे पास एक चर है

unsigned char* data = MyFunction();

डेटा की लंबाई कैसे प्राप्त करें?

0
क्या आपका एफएन रिटर्न चार * है?
जोड़ा लेखक yesraaj, स्रोत
आपको हमें MyFunction() पर कुछ और विवरण देना होगा: यह क्या करता है? वास्तव में यह क्या लौटता है?
जोड़ा लेखक Rasmus Faber, स्रोत

6 उत्तर

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

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

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

0
जोड़ा
नहीं, वह लंबाई वापस गुजर रहा है। बफर कॉलर द्वारा आवंटित किया जाता है और फ़ंक्शन को पास कर दिया जाता है।
जोड़ा लेखक paxdiablo, स्रोत
यदि MyFunction को कॉलर को वापस पॉइंटर पास करना है (उदाहरण के रूप में), पहला तर्क हस्ताक्षर किए गए char ** होना चाहिए
जोड़ा लेखक Mathias, स्रोत

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

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 */
}
0
जोड़ा
लेखक पूछ रहा है कि char * सूचक को कितनी स्मृति आवंटित की जाती है। आपकी शून्य-समाप्त स्थिति खड़ी नहीं है।
जोड़ा लेखक Peter Lee, स्रोत
#include 
#include   
int lengthOfU(unsigned char * str)
{
    int i = 0;

    while(*(str++)){
        i++;
        if(i == INT_MAX)
            return -1;
    }

    return i;
}

HTH

0
जोड़ा
जब 0x0 होता है तो गलत लंबाई उत्पन्न होगी
जोड़ा लेखक user956584, स्रोत

Assuming its a string

length = strlen( char* );

लेकिन ऐसा प्रतीत नहीं होता है ... इसलिए फ़ंक्शन को लंबाई वापस करने के बिना बिना कोई तरीका नहीं है।

0
जोड़ा

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

0
जोड़ा

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

0
जोड़ा