में अहस्ताक्षरित चार * की लंबाई को खोजने के लिए मैं एक चर डेटा की लंबाईकैसे सी
unsigned char* data = MyFunction();
कैसे खोजने के लिए?
में अहस्ताक्षरित चार * की लंबाई को खोजने के लिए मैं एक चर डेटा की लंबाईकैसे सी
unsigned char* data = MyFunction();
कैसे खोजने के लिए?
इसकी एक string
length = strlen(char*);
मान लिया जाये, लेकिन यह होना प्रतीत नहीं होता है ... इसलिए वहाँ एक रास्ता होने समारोह लंबाई लौट बिना नहीं है।
आपको डेटा की लंबाई MyFunction
से वापस लेनी होगी। साथ ही, सुनिश्चित करें कि आप जानते हैं कि स्मृति को आवंटित कौन करता है और इसे इसे किसको रद्द करना है। इसके लिए कई पैटर्न हैं। अक्सर मैंने देखा है:
int MyFunction(unsigned char* data, size_t* datalen)
फिर आप डेटा का आवंटन और में datalen पारित परिणाम (int) तो संकेत देना चाहिए कि अगर आपके बफर (डेटा) काफी लंबे समय से था ...
रूप strlen से पहले कहा। स्ट्रिंग्स में केवल काम करता है नल-टर्मिनेटेड इसलिए पहला 0 ('0' अक्षर) स्ट्रिंग के अंत को चिह्नित करेगा। आप इस तरह someting करने का बेहतर कर रहे हैं:
unsigned int size;
unsigned char* data = MyFunction(&size);
या
unsigned char* data;
unsigned int size = MyFunction(data);
अब यह सच है कि मुश्किल नहीं है। आपको स्ट्रिंग के पहले अक्षर में पॉइंटर मिला है। जब तक आप शून्य मूल्य वाले चरित्र तक नहीं पहुंच जाते, तब तक आपको इस सूचक को बढ़ाने की आवश्यकता होती है। फिर आप मूल पॉइंटर और वॉयला से अंतिम सूचक को घटाते हैं जिसमें आपके पास स्ट्रिंग लम्बाई होती है।
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 */
}
लेखक पूछ रहा है कि चार * पॉइंटर को कितनी मेमोरी असाइन की गई है। आपकी शून्य-समाप्त स्थिति खड़ी नहीं है। –
#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
जब 0x0 होता है तो गलत लंबाई उत्पन्न होगी – user956584
मूल प्रश्न यह नहीं कहा है कि डेटा नहीं दिया एक अशक्त-समाप्त स्ट्रिंग है। यदि नहीं, तो यह जानने का कोई तरीका नहीं है कि डेटा कितना बड़ा है। यदि यह एक स्ट्रिंग है, तो स्ट्रेल का उपयोग करें या अपना खुद का लिखें। स्ट्रेल का उपयोग न करने का एकमात्र कारण यह है कि यदि यह होमवर्क समस्या है, तो मैं इसे आपके लिए वर्तनी नहीं दूंगा।
यदि इसे समाप्त अशक्त नहीं है unsigned char *)
(आकार को खोजने के लिए कोई तरीका नहीं है
करता है अपने fn वापसी चार * आप हमें myfunction() पर कुछ और जानकारी देना होगा – yesraaj
:। यह क्या करता है? क्या? वास्तव में यह क्या लौटाता है? –