दिलचस्प पोस्ट
एएसपी.नेट वेब एपीआई के साथ जेएसओएनपी मैं सर्वर-साइड स्क्रिप्ट का उपयोग कर एक वेबपृष्ठ का एक स्क्रीनशॉट कैसे बना सकता हूं? ऑपरेटर बनाना << आभासी? क्या एक केस स्टेटमेंट और डेकोडे समकक्ष हैं? UIView परत पर इनर छाया प्रभाव? जावास्क्रिप्ट में दिनांक अंतर की गणना करने का सबसे अच्छा तरीका क्या है कुंजी पर आधारित PHP बहुआयामी सरणी को सॉर्ट करें? सेलेनियम एक मौजूदा ब्राउज़र सत्र के साथ बातचीत कर सकता है? सी # में सरणी स्लाइस प्रतिबिंब के माध्यम से मैं निजी तरीकों और निजी डेटा सदस्यों का कैसे उपयोग कर सकता हूं? C ++ में एक गैर तुच्छ कन्स्ट्रक्टर क्या है? html5 समय इनपुट 12 घंटे दिखाता है प्रतिक्रिया सामग्री प्रकार CSV के रूप में सर्वश्रेष्ठ प्रैक्टिस: HTML आईडी या नाम विशेषता से एक्सेस फॉर्म तत्व? जावास्क्रिप्ट चर बाहर या अंदर लूप घोषित?

स्ट्रिंग्स सी में, सबस्ट्रिंग कैसे प्राप्त करें

मेरे पास एक स्ट्रिंग है:

char * someString; 

अगर मुझे इस स्ट्रिंग के पहले पांच अक्षर चाहिए और इसे अन्य स्ट्रिंग में सेट करना चाहते हैं, तो मैं यह कैसे करूँगा?

वेब के समाधान से एकत्रित समाधान "स्ट्रिंग्स सी में, सबस्ट्रिंग कैसे प्राप्त करें"

 #include <string.h> ... char otherString[6]; // note 6, not 5, there's one there for the null terminator ... strncpy(otherString, someString, 5); otherString[5] = '\0'; // place the null terminator 
 char* someString = "abcdedgh"; char* otherString = 0; otherString = (char*)malloc(5+1); memcpy(otherString,someString,5); otherString[5] = 0; 

अद्यतन :
युक्ति: परिभाषा को समझने का एक अच्छा तरीका को दाएं-बायां नियम कहा जाता है (अंत में कुछ लिंक):

पहचानकर्ता से पढ़ने शुरू करें और जोर से कहें => "कुछ someString है …"
अब कुछ स्ट्रिंग के दाईं ओर जायें (वक्तव्य अर्द्धविराम के साथ समाप्त हो गया है, कुछ नहीं कहना है)।
अब पहचानकर्ता के बाईं ओर जाइये ( * का सामना कर रहा है) => तो "… एक संकेतक …" कहें।
अब " * " के बाईं ओर जाना (खोजशब्द char पाया गया है) => कहते हैं "..char"
किया हुआ!

तो char* someString; => "someString को चार के लिए एक सूचक है"

चूंकि एक सूचक केवल एक निश्चित मेमोरी एड्रेस को इंगित करता है, इसलिए इसे "सरणी" वर्णों के "शुरुआती बिंदु" के रूप में भी इस्तेमाल किया जा सकता है।

यह कुछ भी साथ काम करता है .. इसे जाने दो:

 char* s[2]; //=> s is an array of two pointers to char char** someThing; //=> someThing is a pointer to a pointer to char. //Note: We look in the brackets first, and then move outward char (* s)[2]; //=> s is a pointer to an array of two char 

कुछ लिंक: जटिल सी / सी ++ घोषणाओं की व्याख्या कैसे करें और सी घोषणाओं को कैसे पढ़ें

सामान्यीकृत:

 char* subString (const char* input, int offset, int len, char* dest) { int input_len = strlen (input); if (offset + len > input_len) { return NULL; } strncpy (dest, input + offset, len); return dest; } char dest[80]; const char* source = "hello world"; if (subString (source, 0, 5, dest)) { printf ("%s\n", dest); } 

आपको नई स्ट्रिंग अन्य स्ट्रिंग के लिए मेमोरी आवंटित करने की आवश्यकता होगी सामान्य रूप से लम्बाई के एस्ट्रिंग के लिए, ऐसा कुछ आपके लिए काम कर सकता है (जांच की सीमा को मत भूलना …)

 char *subString(char *someString, int n) { char *new = malloc(sizeof(char)*n+1); strncpy(new, someString, n); new[n] = '\0'; return new; } 

यह someString के पहले n वर्णों के उपस्ट्रिंग वापस करेगा। सुनिश्चित करें कि जब आप मुफ्त में () का उपयोग करके मेमोरी को मुक्त करते हैं

 strncpy(otherString, someString, 5); 

अन्य स्ट्रिंग के लिए स्मृति आवंटित करना मत भूलना

 #include <stdio.h> #include <string.h> int main () { char someString[]="abcdedgh"; char otherString[]="00000"; memcpy (otherString, someString, 5); printf ("someString: %s\notherString: %s\n", someString, otherString); return 0; } 

आपको stdio.h की आवश्यकता नहीं होगी यदि आप printf कथन का उपयोग नहीं करते हैं और सभी में स्थिरांक डालते हैं लेकिन छोटे कार्यक्रमों का खराब स्वरूप है और इसे टालना चाहिए।

यह सब दो में गिरने से झटके गिरते हैं:

 char *otherString = strncpy((char*)malloc(6), someString); otherString[5] = 0; 
 char largeSrt[] = "123456789-123"; // original string char * substr; substr = strchr(largeSrt, '-'); // we save the new string "-123" int substringLength = strlen(largeSrt) - strlen(substr); // 13-4=9 (bigger string size) - (new string size) char *newStr = malloc(sizeof(char) * substringLength + 1);// keep memory free to new string strcpy(newStr, largeSrt, substringLength); // copy only 9 characters newStr[substringLength] = '\0'; // close the new string with final character printf("newStr=%s\n", newStr); free(newStr); // you free the memory 

मुझे लगता है कि यह आसान तरीका है … लेकिन मुझे नहीं पता कि मैं परिणामस्वरूप चर सीधे कैसे पारित कर सकता हूं, मैं एक स्थानीय चर सरणी को अस्थायी रूप में बनाऊँगा और इसे वापस कर दूंगा।

 char* substr(char *buff, uint8_t start,uint8_t len, char* substr) { strncpy(substr, buff+start, len); substr[len] = 0; return substr; } 

सटीकता के साथ एक चार सरणी के उपस्ट्रिंग प्राप्त करने के लिए आप snprintf का उपयोग कर सकते हैं यहां "substring.c" नामक एक फ़ाइल उदाहरण है:

 #include <stdio.h> int main() { const char source[] = "This is a string array"; char dest[17]; // get first 16 characters using precision snprintf(dest, sizeof(dest), "%.16s", source); // print substring puts(dest); } // end main 

आउटपुट:

यह एक स्ट्रिंग है

ध्यान दें:

अधिक जानकारी के लिए printf मैन पेज देखें।