पुस्तकालय समारोह strtok
वर्तमान पार्स स्थिति के लिए एक आंतरिक स्थिर राज्य का उपयोग करता है:
- जब तार के साथ कहा जाता है, यह एक नया पार्स शुरू होता है,
- जब पहली तर्क के रूप में
NULL
साथ कहा जाता है, इसे इस्तेमाल करता है इसकी आंतरिक स्थिति।
आप प्रत्यक्ष या परोक्ष रूप से अपने पार्स पाश से strtok
कॉल करते हैं, आंतरिक स्थिति को अद्यतन किया जाएगा और बाहरी दायरे से NULL
साथ कॉल पहले वाली स्थिति से जारी रखने के लिए नहीं होगा, संभवतः अपरिभाषित व्यवहार लागू।
पॉज़िक्स फ़ंक्शन strtok_r
एक स्पष्ट राज्य तर्क लेता है, इसलिए इसे नेस्टेड संदर्भों में उपयोग किया जा सकता है। यदि यह फ़ंक्शन आपके सिस्टम पर उपलब्ध है, तो इसे उन सभी स्थानों पर उपयोग करें जहां आप strtok
का उपयोग करते हैं। वैकल्पिक रूप से, आप strchr()
या strcspn()
के साथ एक अलग विधि कर सकते हैं।
strtok_r
पॉज़िक्स में मानकीकृत है। आपके लक्षित सिस्टम के आधार पर, यह उपलब्ध हो सकता है या नहीं भी हो सकता है। मैकोज़ और अधिकांश यूनिक्स सिस्टम पॉज़िक्स अनुरूप हैं। विंडोज़ इसे एक अलग नाम के तहत हो सकता है। यदि यह उपलब्ध नहीं है, तो आप इसे अपने प्रोग्राम में फिर से परिभाषित कर सकते हैं और इसे सशर्त रूप से संकलित कर सकते हैं।
char *strtok_r(char *s, const char *delim, char **context) {
char *token = NULL;
if (s == NULL)
s = *context;
/* skip initial delimiters */
s += strspn(s, delim);
if (*s != '\0') {
/* we have a token */
token = s;
/* skip the token */
s += strcspn(s, delim);
if (*s != '\0') {
/* cut the string to terminate the token */
*s++ = '\0';
}
}
*context = s;
return token;
}
हमेशा का उपयोग कर strtok_r सुरक्षित होना चाहिए जाने के लिए रास्ता। – mkiever
@mkiever मुझे लगता है कि यह बहुत दुर्लभ है कि आपके पास strtok का उपयोग कर कई धागे हैं? एक गैर मानक कार्य वास्तव में क्यों जाना है, जब थ्रेड-सुरक्षा की आवश्यकता भी नहीं है? आप अपने प्रोग्राम को धीमा करना और इसे पोर्टेबल बनाना चाहते हैं। – Lundin
@ लंदन गैर-मानक? http://pubs.opengroup.org/onlinepubs/9699919799/functions/strtok.html – marcolz