दिलचस्प पोस्ट
एचटीएमएल 5 डाटाबेस भंडारण (एसक्यूएल लाइट) – कुछ सवाल एकाधिक सर्वर पर वायरस स्कैन चलाने के लिए PowerShell का उपयोग करें एप्लिकेशन आइकन क्रिया बार पर नहीं दिखाया गया है पायथन सूची की एक सूची को प्रारंभ करना सभी दूरस्थ कनेक्शन की अनुमति दें, MySQL MySQL पाठ बनाम ब्लॉब बनाम कलोब उथले मर्ज के बजाय गहरी मर्ज कैसे करें? रेल का उपयोग करना, मैं एक पूर्णांक-टाइप कॉलम नहीं होने के लिए मेरी प्राथमिक कुंजी को कैसे सेट कर सकता / सकती हूं? Sendevent कमांड का उपयोग करके डिवाइस पर टच ईवेंट भेजने के लिए एडीबी का उपयोग कैसे करें? SQLSTATE एक कनेक्शन का प्रयास विफल रहा .. – स्थानीय से दूरस्थ सर्वर से कनेक्ट करने का प्रयास करते समय "जावा हीप स्पेस" और "मेमोरी आउट आउट" प्राप्त करते समय ग्रहण स्मृति सेटिंग्स संसाधन अधिग्रहण से क्या मतलब है आरंभिकरण (आरएआईआई) है? ऐक्टिवेटर के बजाय वस्तुओं का तेजी से निर्माण। रचना (प्रकार) संपादकों (एटम, नोटपैड ++, केट, वीआईएम, उदात्त, टेक्स्टपैड, आदि) और आईडीई (नेटबींस, इंटेलीज आईडीईए, एक्लिप्स, विजुअल स्टूडियो, आदि) में कॉलम कैसे चुनें एएसपी.Net अनुप्रयोग में HTTPS का उपयोग कैसे करें

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

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

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 मैन पेज देखें।