सी स्ट्रिंग हैंडलिंग: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
 
(12 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{Redirect|C string}}
{{Redirect|सी स्ट्रिंग}}
{{Short description|Handling of strings in the C programming language}}
{{Short description|Handling of strings in the C programming language}}
{{Use dmy dates|date=July 2020}}
{{Use dmy dates|date=July 2020}}
{{C Standard Library}}
{{C Standard Library}}


सी प्रोग्रामिंग भाषा में अपने मानक पुस्तकालय में [[ स्ट्रिंग (कंप्यूटर विज्ञान) |स्ट्रिंग (कंप्यूटर विज्ञान)]] (कैरेक्टर स्ट्रिंग्स और बाइट स्ट्रिंग्स) पर संचालन को लागू करने वाले कार्यों का एक सेट है। प्रतिलिपि बनाना, संयोजन, टोकनीकरण और खोज जैसे विभिन्न ऑपरेशन समर्थित हैं।। कैरेक्टर स्ट्रिंग्स के लिए, मानक लाइब्रेरी इस परंपरा का उपयोग करती है। कि स्ट्रिंग्स को शून्य-समाप्त किया जाता है। : {{mvar|n}} वर्णों की एक स्ट्रिंग को {{math|''n'' + 1}} तत्वों की एक [[सरणी (डेटा संरचना)]] के रूप में दर्शाया जाता है, जिनमें से अंतिम एक {{code|NUL}} "है।  
सी प्रोग्रामिंग भाषा की मानक लाइब्रेरी में [[ स्ट्रिंग (कंप्यूटर विज्ञान) |'''सी स्ट्रिंग हैंडलिंग''']] (लिपि स्ट्रिंग और बाइट स्ट्रिंग) संचालन को प्रयुक्त करने वाले फंक्शन का एक समूह है। प्रतिलिपि बनाना, संयोजन, टोकनीकरण और खोज जैसे विभिन्न संचालन समर्थित हैं। लिपि स्ट्रिंग के लिए, मानक लाइब्रेरी इस विधि का उपयोग करती है जिससे स्ट्रिंग को रिक्त किया जाता है। {{mvar|n}} अक्षरों की एक स्ट्रिंग को {{math|''n'' + 1}} तत्वों की एक [[सरणी (डेटा संरचना)]] के रूप में दर्शाया जाता है, जिनमें से अंतिम स्ट्रिंग {{code|NUL}} होती है।  


प्रोग्रामिंग भाषा में स्ट्रिंग्स के लिए एकमात्र समर्थन यह है। कि कंपाइलर उद्धृत स्ट्रिंग स्थिरांक को शून्य-समाप्त स्ट्रिंग्स में अनुवादित करता है।  
प्रोग्रामिंग भाषा में स्ट्रिंग के लिए एकमात्र समर्थन यह है कि कंपाइलर स्ट्रिंग स्थिरांक को शून्य-समाप्त स्ट्रिंग में अनुवादित करता है।  


== परिभाषाएँ ==
== परिभाषाएँ ==
एक स्ट्रिंग को पहली शून्य [[कोड इकाई]] (जिसे अक्सर एनयूएल कोड इकाई कहा जाता है। ) द्वारा समाप्त की गई कोड इकाइयों के एक सन्निहित अनुक्रम के रूप में परिभाषित किया गया है। <ref name="open-std1">{{cite web |title=The C99 standard draft + TC3 |url=http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf |access-date=7 January 2011 |location=§7.1.1p1 }}</ref> इसका मतलब है। कि एक स्ट्रिंग में शून्य कोड इकाई नहीं हो सकती है, क्योंकि पहली बार देखी गई इकाई स्ट्रिंग के अंत को चिह्नित करती है। एक स्ट्रिंग की लंबाई शून्य कोड इकाई से पहले कोड इकाइयों की संख्या है। <ref name="open-std1" /> एक स्ट्रिंग द्वारा कब्जा की गई मेमोरी हमेशा लंबाई से एक अधिक कोड इकाई होती है, क्योंकि शून्य टर्मिनेटर को संग्रहीत करने के लिए स्थान की आवश्यकता होती है।  
एक स्ट्रिंग को पहली शून्य [[कोड इकाई]] (जिसे प्रायः एनयूएल कोड इकाई कहा जाता है।) द्वारा समाप्त की गई कोड इकाइयों के एक सन्निहित अनुक्रम के रूप में परिभाषित किया गया है।<ref name="open-std1">{{cite web |title=The C99 standard draft + TC3 |url=http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf |access-date=7 January 2011 |location=§7.1.1p1 }}</ref> इसका अर्थ यह है कि एक स्ट्रिंग में शून्य कोड इकाई नहीं हो सकती है क्योंकि पहली बार देखी गई इकाई स्ट्रिंग के अंत को चिह्नित करती है। एक स्ट्रिंग की लंबाई शून्य कोड इकाई से पहले कोड इकाइयों की संख्या है। <ref name="open-std1" /> एक स्ट्रिंग द्वारा अधिकृत की गई मेमोरी सदैव लंबाई से अधिक कोड इकाई होती है क्योंकि शून्य समापक कोड को संग्रहीत करने के लिए भंडारण की आवश्यकता होती है।  


आम तौर पर, स्ट्रिंग शब्द का अर्थ एक स्ट्रिंग है। जहां कोड इकाई <code>char</code> प्रकार की होती है, जो सभी आधुनिक मशीनों पर बिल्कुल 8 बिट होती है। [[C90 (सी संस्करण)]] विस्तृत स्ट्रिंग्स को परिभाषित करता है। <ref name="open-std1" /> जो <code>wchar_t</code> प्रकार की एक कोड इकाई का उपयोग करता है, जो आधुनिक मशीनों पर 16 या 32 बिट है। यह [[यूनिकोड]] के लिए था लेकिन इसके बजाय यूनिकोड के लिए सामान्य स्ट्रिंग्स में [[UTF-8|यूटीएफ-8]] का उपयोग करना आम होता जा रहा है।  
सामान्यतः स्ट्रिंग शब्द का अर्थ एक स्ट्रिंग है। जहां कोड इकाई <code>char</code> प्रकार की होती है, जो सभी आधुनिक मशीनों पर प्रायः 8 बिट होती है। [[C90 (सी संस्करण)|सी-90 (सी संस्करण)]] विस्तृत स्ट्रिंग को परिभाषित करता है। <ref name="open-std1" /> जो <code>wchar_t</code> प्रकार की एक कोड इकाई का उपयोग करता है, जो आधुनिक मशीनों पर 16 या 32 बिट है। यह [[यूनिकोड]] के लिए था लेकिन इसके अतिरिक्त यूनिकोड के लिए सामान्य स्ट्रिंग में [[UTF-8|यूटीएफ-8]] का उपयोग करना सामान्य होता जा रहा है।  


पहली कोड इकाई में एक पॉइंटर पास करके स्ट्रिंग्स को फ़ंक्शंस में पास किया जाता है। चूँकि <code>char*</code> और <code>wchar_t*</code> अलग-अलग प्रकार के हैं व्यापक स्ट्रिंग्स को प्रोसेस करने वाले फ़ंक्शन सामान्य स्ट्रिंग्स को प्रोसेस करने वाले फ़ंक्शंस से भिन्न होते हैं। और उनके अलग-अलग नाम होते हैं।।
पहली कोड इकाई में एक पॉइंटर पास करके स्ट्रिंग को फ़ंक्शंन में पास किया जाता है। चूँकि <code>char*</code> और <code>wchar_t*</code> अलग-अलग प्रकार के हैं व्यापक स्ट्रिंग का प्रसंस्करण करने वाले फ़ंक्शन सामान्य स्ट्रिंग के प्रसंस्करण करने वाले फ़ंक्शंन से भिन्न होते हैं। और प्रायः उनके अलग-अलग नाम होते हैं।


संकलन के दौरान स्ट्रिंग अक्षर (सी स्रोत कोड में <code>"text"</code>) को सरणियों में बदल दिया जाता है। <ref>{{cite web |title=The C99 standard draft + TC3 |url=http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf |access-date=7 January 2011 |location=§6.4.5p7 }}</ref> परिणाम कोड इकाइयों की एक सरणी है। जिसमें सभी वर्ण और एक पिछली शून्य कोड इकाई शामिल है। C90 में <code>L"text"</code> एक विस्तृत स्ट्रिंग उत्पन्न करता है। एक स्ट्रिंग शाब्दिक में शून्य कोड इकाई हो सकती है। (एक तरीका स्रोत में <code>\0</code> डालना है। ), लेकिन इससे स्ट्रिंग उस बिंदु पर समाप्त हो जाएगी। शेष शाब्दिक को मेमोरी में रखा जाएगा (अंत में एक और शून्य कोड इकाई को जोड़कर) लेकिन यह जानना असंभव है। कि उन कोड इकाइयों को स्ट्रिंग शाब्दिक से अनुवादित किया गया था, इसलिए ऐसा स्रोत कोड एक स्ट्रिंग शाब्दिक नहीं है। <ref>{{cite web |title=The C99 standard draft + TC3 |url=http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf |access-date=7 January 2011 |location=Section 6.4.5 footnote 66}}</ref>
संकलन के समय स्ट्रिंग अक्षर (सी स्रोत कोड में <code>"text"</code>) को सरणियों में परिवर्तित कर दिया जाता है।<ref>{{cite web |title=The C99 standard draft + TC3 |url=http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf |access-date=7 January 2011 |location=§6.4.5p7 }}</ref> परिणाम कोड इकाइयों की एक सरणी है। जिसमें सभी अक्षर और एक पिछली शून्य कोड इकाई मे सम्मिलित होते है। सी-90 में <code>L"text"</code> एक विस्तृत स्ट्रिंग उत्पन्न करता है। एक स्ट्रिंग में शून्य कोड इकाई हो सकती है। जिसमे स्रोत कोड <code>\0</code> प्रयुक्त किया जाता है लेकिन इससे स्ट्रिंग उस बिंदु पर समाप्त हो जाती है। शेष कोड को मेमोरी में रखा जाता है और अंत में एक और शून्य कोड इकाई को जोड़कर यह जानना असंभव है कि उन कोड इकाइयों को स्ट्रिंग शाब्दिक से अनुवादित किया गया था। इसलिए ऐसा स्रोत कोड एक स्ट्रिंग शाब्दिक नहीं होता है। <ref>{{cite web |title=The C99 standard draft + TC3 |url=http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf |access-date=7 January 2011 |location=Section 6.4.5 footnote 66}}</ref>
== कैरेक्टर एनकोडिंग ==
== लिपि एनकोडिंग ==
प्रत्येक स्ट्रिंग उपयुक्त प्रकार (<code>char</code> या <code>wchar_t</code>) की शून्य कोड इकाई की पहली घटना पर समाप्त होती है। नतीजतन, एक बाइट स्ट्रिंग (char*) में [[ASCII]] या किसी ASCII एक्सटेंशन में गैर-NUL वर्ण हो सकते हैं लेकिन [[UTF-16]] जैसे एन्कोडिंग में वर्ण नहीं हो सकते हैं। (भले ही 16-बिट कोड इकाई गैर-शून्य हो, इसकी उच्च या निम्न बाइट शून्य हो सकता है। )। जिन एन्कोडिंग को विस्तृत स्ट्रिंग्स में संग्रहीत किया जा सकता है, उन्हें <code>wchar_t</code> की चौड़ाई द्वारा परिभाषित किया गया है। अधिकांश कार्यान्वयन में <code>wchar_t</code> कम से कम 16 बिट है, और इसलिए सभी 16-बिट एन्कोडिंग, जैसे यूसीएस -2, को संग्रहीत किया जा सकता है। यदि <code>wchar_t</code> 32-बिट है, तो 32-बिट एन्कोडिंग, जैसे [[UTF-32]] संग्रहीत किया जा सकता है। (मानक के लिए एक "प्रकार जो किसी भी विस्तृत वर्ण को धारण करता है। " की आवश्यकता होती है, जो UCS-2 से UTF-16 में बदलाव के बाद से विंडोज़ पर अब सच नहीं है। इसे मानक में एक दोष के रूप में पहचाना गया और C++ में ठीक किया गया।)<ref>{{cite web|url=https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2460r2.pdf|title=Relax requirements on wchar_t to match existing practices}}</ref> C++11 और C11 स्पष्ट चौड़ाई {{code|char16_t}} और {{code|char32_t}} के साथ दो प्रकार जोड़ते हैं।।<ref>{{cite web |title=मौलिक प्रकार|url=https://en.cppreference.com/w/cpp/language/types |website=en.cppreference.com}}</ref>
प्रत्येक स्ट्रिंग उपयुक्त प्रकार (<code>char</code> या <code>wchar_t</code>) की शून्य कोड इकाई की पहली घटना पर समाप्त होती है। जिसके परिणामस्वरूप एक बाइट स्ट्रिंग (char*) में [[ASCII|एएससीआईआई]] या किसी एएससीआईआई एक्सटेंशन में गैर-शून्य अक्षर हो सकते हैं लेकिन [[UTF-16|यूटीएफ-16]] जैसे एन्कोडिंग में वर्ण नहीं हो सकते हैं। यद्यपि 16-बिट कोड इकाई गैर-शून्य हो, इसकी उच्च या निम्न बाइट शून्य हो सकता है। जिन एन्कोडिंग को विस्तृत स्ट्रिंग में संग्रहीत किया जा सकता है, उन्हें <code>wchar_t</code> की चौड़ाई द्वारा परिभाषित किया गया है। अधिकांश कार्यान्वयन में <code>wchar_t</code> कम से कम 16 बिट होते है। इसलिए सभी 16-बिट एन्कोडिंग, जैसे यूसीएस -2 को संग्रहीत किया जा सकता है यदि <code>wchar_t</code> 32-बिट है, तो 32-बिट एन्कोडिंग जैसे [[UTF-32|यूटीएफ-32]] को संग्रहीत किया जा सकता है। मानक के लिए एक "प्रकार की आवश्यकता होती है जो किसी भी व्यापक चरित्र को धारण करता हो जो यूसीएस-2 से यूटीएफ-16 में परिवर्तन के बाद से विंडोज़ पर अब सच नहीं है। इसे मानक में एक दोष के रूप में पहचाना गया है और C++ में ठीक किया गया है।<ref>{{cite web|url=https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2460r2.pdf|title=Relax requirements on wchar_t to match existing practices}}</ref> C++11 और C-11 स्पष्ट चौड़ाई {{code|char16_t}} और {{code|char32_t}} के साथ दो प्रकार संबद्ध हैं।<ref>{{cite web |title=मौलिक प्रकार|url=https://en.cppreference.com/w/cpp/language/types |website=en.cppreference.com}}</ref>


परिवर्तनीय-चौड़ाई एन्कोडिंग का उपयोग बाइट स्ट्रिंग्स और वाइड स्ट्रिंग्स दोनों में किया जा सकता है। स्ट्रिंग की लंबाई और ऑफसेट को बाइट्स या <code>wchar_t</code> में मापा जाता है, न कि "अक्षरों" में, जो शुरुआती प्रोग्रामर के लिए भ्रमित करने वाला हो सकता है। UTF-8 और [[Shift JIS]] का उपयोग अक्सर C बाइट स्ट्रिंग्स में किया जाता है, जबकि UTF-16 का उपयोग अक्सर C वाइड स्ट्रिंग्स में किया जाता है। जब <code>wchar_t</code> 16 बिट होता है। <code>strncpy</code> जैसे फ़ंक्शंस का उपयोग करके चर-चौड़ाई वाले वर्णों के साथ स्ट्रिंग को छोटा करना स्ट्रिंग के अंत में अमान्य अनुक्रम उत्पन्न कर सकता है। यह असुरक्षित हो सकता है। यदि काटे गए हिस्सों की व्याख्या उस कोड द्वारा की जाती है। जो मानता है। कि इनपुट वैध है।  
परिवर्तनीय-चौड़ाई एन्कोडिंग का उपयोग बाइट स्ट्रिंग और वाइड स्ट्रिंग दोनों में किया जा सकता है। स्ट्रिंग की लंबाई और समूह को बाइट्स या <code>wchar_t</code> में मापा जाता है, न कि "अक्षरों" में, जो प्रारम्भिक प्रोग्रामर के लिए भ्रमित करने वाला हो सकता है। यूटीएफ-8 और [[Shift JIS|शिफ्ट जेआईएस]] का उपयोग प्रायः C बाइट स्ट्रिंग में किया जाता है, जबकि यूटीएफ-16 का उपयोग प्रायः C वाइड स्ट्रिंग में किया जाता है। जब <code>wchar_t</code> 16 बिट होता है। <code>strncpy</code> जैसे फ़ंक्शंन का उपयोग करके चर-चौड़ाई वाले वर्णों के साथ स्ट्रिंग को छोटा करना स्ट्रिंग के अंत में अमान्य अनुक्रम उत्पन्न कर सकता है। यह असुरक्षित हो सकता है। यदि विभाजित किए गए भागों की व्याख्या उस कोड द्वारा की जाती है जो मानता है कि इनपुट वैध है।  


यूनिकोड शाब्दिक के लिए समर्थन जैसे {{Code|lang=c|1=char foo[512] = "φωωβαρ";}} (UTF-8) या {{Code|lang=c|1=wchar_t foo[512] = L"φωωβαρ";}} (UTF-16 या UTF-32, {{code|wchar_t}} पर निर्भर करता है। ) कार्यान्वयन परिभाषित है, [6] और इसके लिए आवश्यक हो सकता है। कि स्रोत कोड एक ही एन्कोडिंग में हो, विशेष रूप से चार के लिए जहां कंपाइलर उद्धरणों के बीच जो कुछ भी है। उसे कॉपी कर सकते हैं।। कुछ कंपाइलरों या संपादकों को UTF-8 के प्रत्येक बाइट के लिए सभी गैर-ASCII वर्णों को<code>\xNN</code> अनुक्रमों के रूप में, और/या UTF-16 के प्रत्येक शब्द के लिए \uNNNN दर्ज करने की आवश्यकता होगी। C11 (और C++11) के बाद से, एक नया {{Code|lang=c|1=char foo[512] = u8"φωωβαρ";}} शाब्दिक सिंटैक्स उपलब्ध है। जो बाइटस्ट्रिंग शाब्दिक के लिए यूटीएफ-8 की गारंटी देता है। <ref>{{cite web |title=स्ट्रिंग शाब्दिक|url=https://en.cppreference.com/w/c/language/string_literal |website=en.cppreference.com |access-date=23 December 2019}}</ref> [[C++20]] और C23 के बाद से, एक <code>char8_t</code> प्रकार जोड़ा गया था जो UTF-8 वर्णों को संग्रहीत करने के लिए है। और यू-8 उपसर्ग वर्ण और स्ट्रिंग अक्षर के प्रकारों को क्रमशः <code>char8_t</code> और <code>char8_t[]</code> में बदल दिया गया था।
यूनिकोड शाब्दिक के लिए समर्थन जैसे {{Code|lang=c|1=char foo[512] = "φωωβαρ";}} (यूटीएफ-8) या {{Code|lang=c|1=wchar_t foo[512] = L"φωωβαρ";}} यूटीएफ-16 या यूटीएफ-32, {{code|wchar_t}} पर निर्भर करता है। कार्यान्वयन परिभाषित है और इसके लिए आवश्यक हो सकता है कि स्रोत कोड एक ही एन्कोडिंग में हो, विशेष रूप से <code>char</code> के लिए जहां कंपाइलर उद्धरणों के बीच जो कुछ भी है उसका अनुकरण कर सकते हैं। कुछ कंपाइलरों या संपादकों को यूटीएफ-8 के प्रत्येक बाइट के लिए सभी गैर-एएससीआईआई वर्णों को<code>\xNN</code> अनुक्रमों के रूप में या यूटीएफ-16 के प्रत्येक शब्द के लिए \uNNNN प्रस्तुत करने की आवश्यकता होती है। C11 (और C++11) के बाद से, एक नया {{Code|lang=c|1=char foo[512] = u8"φωωβαρ";}} शाब्दिक वाक्य-विन्यास उपलब्ध है जो बाइटस्ट्रिंग शाब्दिक के लिए यूटीएफ-8 का दायित्व देता है।<ref>{{cite web |title=स्ट्रिंग शाब्दिक|url=https://en.cppreference.com/w/c/language/string_literal |website=en.cppreference.com |access-date=23 December 2019}}</ref> [[C++20|सी++20]] और सी-23 के बाद से एक <code>char8_t</code> प्रकार जोड़ा गया था जो यूटीएफ-8 वर्णों को संग्रहीत करने के लिए है, यू-8 उपसर्ग वर्ण और स्ट्रिंग अक्षर के प्रकारों को क्रमशः <code>char8_t</code> और <code>char8_t[]</code> में परिवर्तित कर दिया गया था।


== कार्यों का अवलोकन ==
== फंक्शन का अवलोकन ==
C स्ट्रिंग्स पर चलने वाले अधिकांश फ़ंक्शन <code>string.h</code> हेडर (C++ में <code>cstring</code>) में घोषित किए जाते हैं जबकि C वाइड स्ट्रिंग्स पर चलने वाले फ़ंक्शन <code>wchar.h</code> हेडर (C++ में <code>cwchar</code>) में घोषित किए जाते हैं।। इन हेडर में मेमोरी बफ़र्स को संभालने के लिए उपयोग किए जाने वाले फ़ंक्शन की घोषणाएं भी शामिल हैं।; इस प्रकार यह नाम एक मिथ्या नाम है।  
सी स्ट्रिंग पर चलने वाले अधिकांश फ़ंक्शन <code>string.h</code> हेडर (C++ में <code>cstring</code>) में घोषित किए जाते हैं जबकि C वाइड स्ट्रिंग पर चलने वाले फ़ंक्शन <code>wchar.h</code> हेडर (C++ में <code>cwchar</code>) में घोषित किए जाते हैं। इन हेडर में मेमोरी बफ़र्स को संभालने के लिए उपयोग किए जाने वाले फ़ंक्शन की घोषणाएं भी सम्मिलित हैं। इस प्रकार यह नाम एक गलत नाम है।  


<code>string.h</code> में घोषित फ़ंक्शंस बेहद लोकप्रिय हैं क्योंकि सी मानक लाइब्रेरी के एक भाग के रूप में, उन्हें सी का समर्थन करने वाले किसी भी प्लेटफ़ॉर्म पर काम करने की गारंटी दी जाती है। हालाँकि, इन फ़ंक्शंस के साथ कुछ सुरक्षा समस्याएं मौजूद हैं जैसे कि उपयोग न किए जाने पर संभावित बफर ओवरफ़्लो सावधानीपूर्वक और उचित तरीके से, जिससे प्रोग्रामर सुरक्षित और संभवतः कम पोर्टेबल वेरिएंट पसंद करते हैं जिनमें से कुछ लोकप्रिय नीचे सूचीबद्ध हैं।। इनमें से कुछ फ़ंक्शन एक <code>const</code> स्ट्रिंग पॉइंटर को स्वीकार करके और स्ट्रिंग के भीतर एक गैर-कॉन्स्ट पॉइंटर को वापस करके कॉन्स्ट-शुद्धता का उल्लंघन भी करते हैं।। इसे ठीक करने के लिए, कुछ को मानक लाइब्रेरी के C++ संस्करण में दो अतिभारित फ़ंक्शंस में विभाजित किया गया है।  
<code>string.h</code> में घोषित फ़ंक्शंन अपेक्षाकृत लोकप्रिय हैं क्योंकि सी मानक लाइब्रेरी के एक भाग के रूप में उन्हें C का समर्थन करने वाले किसी भी प्लेटफ़ॉर्म पर कार्य करने का दायित्व दिया जाता है। हालाँकि, इन फ़ंक्शंन के साथ कुछ सुरक्षा समस्याएं सम्मिलित हैं जैसे कि उपयोग न किए जाने पर संभावित बफर ओवरफ़्लो सावधानीपूर्वक और उपयुक्त तरीके से जिससे प्रोग्रामर सुरक्षित और संभवतः कम पोर्टेबल उपकरण पसंद करते हैं जिनमें से कुछ लोकप्रिय नीचे सूचीबद्ध हैं। इनमें से कुछ फ़ंक्शन एक <code>const</code> स्ट्रिंग पॉइंटर को स्वीकृत करके और स्ट्रिंग के भीतर एक गैर-स्थिर पॉइंटर को वापस करके स्थिर-शुद्धता का उल्लंघन भी करते हैं। इसे ठीक करने के लिए कुछ को मानक लाइब्रेरी के सी++ संस्करण में दो अतिभारित फ़ंक्शंन में विभाजित किया गया है।  


ऐतिहासिक दस्तावेज़ीकरण में C स्ट्रिंग्स के लिए "बाइट" के स्थान पर अक्सर "कैरेक्टर" शब्द का उपयोग किया जाता था, जिससे कई लोगों को यह विश्वास हो जाता है। कि ये फ़ंक्शन किसी तरह UTF-8 के लिए काम नहीं करते हैं।। वास्तव में सभी लंबाई को बाइट्स के रूप में परिभाषित किया गया है। और यह सभी कार्यान्वयनों में सच है, और ये फ़ंक्शन यूटीएफ -8 के साथ-साथ सिंगल-बाइट एन्कोडिंग के साथ भी काम करते हैं।। इसे स्पष्ट करने के लिए बीएसडी दस्तावेज़ को ठीक कर दिया गया है, लेकिन POSIX, Linux और Windows दस्तावेज़ अभी भी कई स्थानों पर "वर्ण" का उपयोग करते हैं। जहां "बाइट" या {{code|wchar_t}} सही शब्द है।  
ऐतिहासिक दस्तावेज़ीकरण में सी स्ट्रिंग के लिए "बाइट" के स्थान पर प्रायः "लिपि" शब्द का उपयोग किया जाता था। जिससे कई लोगों को यह विश्वास हो जाता है कि ये फ़ंक्शन किसी प्रकार यूटीएफ-8 के लिए कार्य नहीं करते हैं। वास्तव में सभी लंबाई को बाइट्स के रूप में परिभाषित किया गया है और यह सभी कार्यान्वयनों में सच है ये फ़ंक्शन यूटीएफ -8 के साथ-साथ एकल बाइट एन्कोडिंग के साथ भी कार्य करते हैं। इसे स्पष्ट करने के लिए बीएसडी दस्तावेज़ को ठीक कर दिया गया है, लेकिन पॉज़िक्स, लिनक्स और विंडोज़ दस्तावेज़ अभी भी कई स्थानों पर <code>char</code> का उपयोग करते हैं। जहां "बाइट" या {{code|wchar_t}} सही शब्द है।  


मेमोरी बफ़र्स को संभालने के लिए फ़ंक्शन बाइट्स के अनुक्रम को संसाधित कर सकते हैं। जिसमें डेटा के हिस्से के रूप में नल-बाइट शामिल है। इन फ़ंक्शंस के नाम आम तौर पर <code>str</code> उपसर्ग के विपरीत, <code>mem</code> से शुरू होते हैं।।
मेमोरी बफ़र्स को संभालने के लिए फ़ंक्शन बाइट्स के अनुक्रम को संसाधित कर सकते हैं, जिसमें डेटा के भाग के रूप में शून्य-बाइट सम्मिलित है। इन फ़ंक्शंन के नाम सामान्यतः <code>str</code> उपसर्ग के विपरीत <code>mem</code> से प्रारम्भ होते हैं।


=== स्थिरांक और प्रकार ===
=== स्थिरांक और प्रकार ===
Line 37: Line 37:
! नाम !! टिप्पणी
! नाम !! टिप्पणी
|-
|-
|{{mono|NULL}} || मैक्रो का विस्तार शून्य सूचक स्थिरांक तक होता है, जो कि एक सूचक मान का प्रतिनिधित्व करने वाला स्थिरांक है। जो स्मृति में किसी ऑब्जेक्ट का वैध पता नहीं होने की गारंटी देता है।  
|{{mono|NULL}} || मैक्रो का विस्तार शून्य सूचक स्थिरांक तक होता है, जो कि एक सूचक मान का प्रतिनिधित्व करने वाला स्थिरांक है। जो मेमोरी में किसी ऑब्जेक्ट का सही एड्रेस नहीं होने का दायित्व करता है।  
|-
|-
|{{anchor|wchar_t}}{{mono|wchar_t}} || "विस्तृत" स्ट्रिंग में एक कोड इकाई के लिए उपयोग किया जाने वाला प्रकार। विंडोज़ पर, {{mono|wchar_t}} का बड़े पैमाने पर उपयोग करने वाला एकमात्र प्लेटफ़ॉर्म, इसे 16-बिट के रूप में परिभाषित किया गया है। जो किसी भी [[Unicode|यूनिकोड (UCS-2)]] वर्ण का प्रतिनिधित्व करने के लिए पर्याप्त था, लेकिन अब केवल UTF-16 कोड इकाई का प्रतिनिधित्व करने के लिए पर्याप्त है, जो आधा हो सकता है। कोड बिंदु. अन्य प्लेटफ़ॉर्म पर इसे 32-बिट के रूप में परिभाषित किया गया है। और एक यूनिकोड कोड बिंदु हमेशा फिट बैठता है। <ref>{{cite web |url=https://pubs.opengroup.org/onlinepubs/007908775/xsh/stddef.h.html |title=stddef.h - standard type definitions |publisher=The Open Group |access-date=2017-01-28 }}</ref> सी मानक के लिए केवल यह आवश्यक है। कि {{mono|wchar_t}} समर्थित सिस्टम लोकेशंस के बीच सबसे व्यापक वर्ण सेट को धारण करने के लिए पर्याप्त चौड़ा हो और आकार में {{mono|char}} से बड़ा या बराबर हो,<ref>{{cite book |title=Unicode Demystified: A Practical Programmer's Guide to the Encoding Standard |first=Richard |last=Gillam |url=https://books.google.com/books?id=wn5sXG8bEAcC&pg=PA714 |page=714 |publisher=Addison-Wesley Professional |year=2003|isbn=9780201700527 }}</ref>
|{{anchor|wchar_t}}{{mono|wchar_t}} || "विस्तृत" स्ट्रिंग में एक कोड इकाई के लिए उपयोग किया जाने वाला प्रकार विंडोज़ पर, {{mono|wchar_t}} का बड़े पैमाने पर उपयोग करने वाला एकमात्र प्लेटफ़ॉर्म है। इसे 16-बिट के रूप में परिभाषित किया गया है जो किसी भी [[Unicode|यूनिकोड (यूसीएस-2)]] वर्ण का प्रतिनिधित्व करने के लिए पर्याप्त था, लेकिन अब केवल यूटीएफ-16 कोड इकाई का प्रतिनिधित्व करने के लिए पर्याप्त है, जो आधा हो सकता है। कोड बिंदु को अन्य प्लेटफ़ॉर्म पर इसे 32-बिट के रूप में परिभाषित किया गया है। और एक यूनिकोड कोड बिंदु सदैव प्रयुक्त किया जाता है। <ref>{{cite web |url=https://pubs.opengroup.org/onlinepubs/007908775/xsh/stddef.h.html |title=stddef.h - standard type definitions |publisher=The Open Group |access-date=2017-01-28 }}</ref> सी मानक के लिए केवल यह आवश्यक है। कि {{mono|wchar_t}} समर्थित सिस्टम एड्रेस के बीच सबसे व्यापक वर्ण समूह को धारण करने के लिए पर्याप्त चौड़ा हो और आकार में {{mono|char}} से बड़ा या बराबर हो,<ref>{{cite book |title=Unicode Demystified: A Practical Programmer's Guide to the Encoding Standard |first=Richard |last=Gillam |url=https://books.google.com/books?id=wn5sXG8bEAcC&pg=PA714 |page=714 |publisher=Addison-Wesley Professional |year=2003|isbn=9780201700527 }}</ref>
|-
|-
|{{anchor|wint_t}}{{mono|wint_t}} || पूर्णांक प्रकार जो {{code|wchar_t}} के किसी भी मान के साथ-साथ मैक्रो WEOF के मान को भी धारण कर सकता है। अभिन्न पदोन्नति द्वारा यह प्रकार अपरिवर्तित है। आमतौर पर 32 बिट हस्ताक्षरित मान।
|{{anchor|wint_t}}{{mono|wint_t}} || पूर्णांक प्रकार जो {{code|wchar_t}} के किसी भी मान के साथ-साथ मैक्रो डब्ल्यूईओएफ के मान को भी धारण कर सकता है। सामान्यतः 32 बिट हस्ताक्षरित मान अभिन्न पदोन्नति द्वारा यह प्रकार अपरिवर्तित होता है।
|-
|-
|{{anchor|mbstate_t}}{{mono|mbstate_t}} ||इसमें एक कॉल से दूसरे फ़ंक्शन तक आवश्यक रूपांतरण स्थिति के बारे में सभी जानकारी शामिल है।  
|{{anchor|mbstate_t}}{{mono|mbstate_t}} ||इसमें एक कॉल से दूसरे फ़ंक्शन तक आवश्यक रूपांतरण स्थिति के विषय में सभी जानकारी सम्मिलित होती है।  
|}
|}
=== फंक्शन ===
=== फंक्शन ===
Line 52: Line 52:
स्ट्रिंग
स्ट्रिंग
! वाइड <br>स्ट्रिंग
! वाइड <br>स्ट्रिंग
! विवरण<ref group="note">For wide string functions substitute {{mono|wchar_t}} for "byte" in the description</ref>
! विवरणFor wide string functions substitute {{mono|wchar_t}} for "byte" in the description</ref>
|-
|-
! rowspan=5 | स्ट्रिंग<br>प्रकलन (कंप्यूटर)
! rowspan=5 | स्ट्रिंग<br>प्रकलन (कंप्यूटर)
| {{anchor|strcpy}}{{mono|strcpy}}<ref name=strcpy-cppreference>{{cite web|url=https://en.cppreference.com/w/c/string/byte/strcpy |title=strcpy - cppreference.com |publisher=En.cppreference.com |date=2014-01-02 |access-date=2014-03-06}}</ref>
| {{anchor|strcpy}}{{mono|strcpy}}<ref name=strcpy-cppreference>{{cite web|url=https://en.cppreference.com/w/c/string/byte/strcpy |title=strcpy - cppreference.com |publisher=En.cppreference.com |date=2014-01-02 |access-date=2014-03-06}}</ref>
| {{anchor|wcscpy}}{{mono|wcscpy}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/wide/wcscpy |title=wcscpy - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
| {{anchor|wcscpy}}{{mono|wcscpy}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/wide/wcscpy |title=wcscpy - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
|एक स्ट्रिंग को दूसरे में कॉपी करता है।  
|एक स्ट्रिंग को दूसरे में रूपांतरित करता है।  
|-
|-
| {{anchor|strncpy}}{{mono|strncpy}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/strncpy |title=strncpy - cppreference.com |publisher=En.cppreference.com |date=2013-10-04 |access-date=2014-03-06}}</ref>
| {{anchor|strncpy}}{{mono|strncpy}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/strncpy |title=strncpy - cppreference.com |publisher=En.cppreference.com |date=2013-10-04 |access-date=2014-03-06}}</ref>
| {{anchor|wcsncpy}}{{mono|wcsncpy}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/wide/wcsncpy |title=wcsncpy - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
| {{anchor|wcsncpy}}{{mono|wcsncpy}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/wide/wcsncpy |title=wcsncpy - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
|स्रोत से कॉपी करके या शून्य जोड़कर बिल्कुल n बाइट्स लिखता है।  
|स्रोत से रूपांतरित करके या शून्य जोड़कर n बाइट्स लिखता है।  
|-
|-
| {{anchor|strcat}}{{mono|strcat}}<ref name=strcat-cppreference>{{cite web|url=https://en.cppreference.com/w/c/string/byte/strcat |title=strcat - cppreference.com |publisher=En.cppreference.com |date=2013-10-08 |access-date=2014-03-06}}</ref>
| {{anchor|strcat}}{{mono|strcat}}<ref name=strcat-cppreference>{{cite web|url=https://en.cppreference.com/w/c/string/byte/strcat |title=strcat - cppreference.com |publisher=En.cppreference.com |date=2013-10-08 |access-date=2014-03-06}}</ref>
Line 69: Line 69:
| {{anchor|strncat}}{{mono|strncat}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/strncat |title=strncat - cppreference.com |publisher=En.cppreference.com |date=2013-07-01 |access-date=2014-03-06}}</ref>
| {{anchor|strncat}}{{mono|strncat}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/strncat |title=strncat - cppreference.com |publisher=En.cppreference.com |date=2013-07-01 |access-date=2014-03-06}}</ref>
| {{anchor|wcsncat}}{{mono|wcsncat}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/wide/wcsncat |title=wcsncat - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
| {{anchor|wcsncat}}{{mono|wcsncat}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/wide/wcsncat |title=wcsncat - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
|एक स्ट्रिंग से दूसरे स्ट्रिंग में n बाइट्स से अधिक नहीं जोड़ता
|एक स्ट्रिंग से दूसरे स्ट्रिंग में n बाइट्स से अधिक नहीं जोड़ता है।
|-
|-
| {{anchor|strxfrm}}{{mono|strxfrm}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/strxfrm |title=strxfrm - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
| {{anchor|strxfrm}}{{mono|strxfrm}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/strxfrm |title=strxfrm - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
Line 78: Line 78:
| {{anchor|strlen}}{{mono|strlen}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/strlen |title=strlen - cppreference.com |publisher=En.cppreference.com |date=2013-12-27 |access-date=2014-03-06}}</ref>
| {{anchor|strlen}}{{mono|strlen}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/strlen |title=strlen - cppreference.com |publisher=En.cppreference.com |date=2013-12-27 |access-date=2014-03-06}}</ref>
| {{anchor|wcslen}}{{mono|wcslen}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/wide/wcslen |title=wcslen - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
| {{anchor|wcslen}}{{mono|wcslen}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/wide/wcslen |title=wcslen - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
|स्ट्रिंग की लंबाई लौटाता है।  
|स्ट्रिंग की लंबाई वापस करता है।  
|-
|-
| {{anchor|strcmp}}{{mono|strcmp}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/strcmp |title=strcmp - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
| {{anchor|strcmp}}{{mono|strcmp}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/strcmp |title=strcmp - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
| {{anchor|wcscmp}}{{mono|wcscmp}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/wide/wcscmp |title=wcscmp - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
| {{anchor|wcscmp}}{{mono|wcscmp}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/wide/wcscmp |title=wcscmp - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
|दो तारों की तुलना करता है। (तीन-तरफा तुलना)
|दो तारों की तीन-तरफा की तुलना करता है।
|-
|-
| {{anchor|strncmp}}{{mono|strncmp}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/strncmp |title=strncmp - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
| {{anchor|strncmp}}{{mono|strncmp}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/strncmp |title=strncmp - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
| {{anchor|wcsncmp}}{{mono|wcsncmp}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/wide/wcsncmp |title=wcsncmp - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
| {{anchor|wcsncmp}}{{mono|wcsncmp}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/wide/wcsncmp |title=wcsncmp - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
|दो स्ट्रिंग्स में बाइट्स की एक विशिष्ट संख्या की तुलना करता है।  
|दो स्ट्रिंग में बाइट्स की एक विशिष्ट संख्या की तुलना करता है।  
|-
|-
| {{anchor|strcoll}}{{mono|strcoll}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/strcoll |title=strcoll - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
| {{anchor|strcoll}}{{mono|strcoll}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/strcoll |title=strcoll - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
Line 94: Line 94:
| {{anchor|strchr}}{{mono|strchr}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/strchr |title=strchr - cppreference.com |publisher=En.cppreference.com |date=2014-02-23 |access-date=2014-03-06}}</ref>
| {{anchor|strchr}}{{mono|strchr}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/strchr |title=strchr - cppreference.com |publisher=En.cppreference.com |date=2014-02-23 |access-date=2014-03-06}}</ref>
| {{anchor|wcschr}}{{mono|wcschr}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/wide/wcschr |title=wcschr - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
| {{anchor|wcschr}}{{mono|wcschr}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/wide/wcschr |title=wcschr - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
|एक स्ट्रिंग में बाइट की पहली घटना ढूँढता है।  
|स्ट्रिंग में बाइट की पहली घटना खोजता है।  
|-
|-
| {{anchor|strrchr}}{{mono|strrchr}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/strrchr |title=strrchr - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
| {{anchor|strrchr}}{{mono|strrchr}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/strrchr |title=strrchr - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
| {{anchor|wcsrchr}}{{mono|wcsrchr}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/wide/wcsrchr |title=wcsrchr - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
| {{anchor|wcsrchr}}{{mono|wcsrchr}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/wide/wcsrchr |title=wcsrchr - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
|एक स्ट्रिंग में बाइट की अंतिम घटना ढूँढता है।  
|स्ट्रिंग में बाइट की अंतिम घटना खोजता है।  
|-
|-
| {{anchor|strspn}}{{mono|strspn}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/strspn |title=strspn - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
| {{anchor|strspn}}{{mono|strspn}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/strspn |title=strspn - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
| {{anchor|wcsspn}}{{mono|wcsspn}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/wide/wcsspn |title=wcsspn - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
| {{anchor|wcsspn}}{{mono|wcsspn}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/wide/wcsspn |title=wcsspn - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
|एक स्ट्रिंग में प्रारंभिक बाइट्स की संख्या लौटाता है। जो दूसरी स्ट्रिंग में हैं।
|स्ट्रिंग में प्रारंभिक बाइट्स की संख्या वापस करता है जो दूसरी स्ट्रिंग में हैं।
|-
|-
| {{anchor|strcspn}}{{mono|strcspn}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/strcspn |title=strcspn - cppreference.com |publisher=En.cppreference.com |date=2013-05-31 |access-date=2014-03-06}}</ref>
| {{anchor|strcspn}}{{mono|strcspn}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/strcspn |title=strcspn - cppreference.com |publisher=En.cppreference.com |date=2013-05-31 |access-date=2014-03-06}}</ref>
| {{anchor|wcscspn}}{{mono|wcscspn}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/wide/wcscspn |title=wcscspn - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
| {{anchor|wcscspn}}{{mono|wcscspn}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/wide/wcscspn |title=wcscspn - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
|एक स्ट्रिंग में प्रारंभिक बाइट्स की संख्या लौटाता है। जो दूसरी स्ट्रिंग में नहीं हैं।
|स्ट्रिंग में प्रारंभिक बाइट्स की संख्या वापस करता है जो दूसरी स्ट्रिंग में नहीं हैं।
|-
|-
| {{anchor|strpbrk}}{{mono|strpbrk}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/strpbrk |title=strpbrk - cppreference.com |publisher=En.cppreference.com |date=2013-05-31 |access-date=2014-03-06}}</ref>
| {{anchor|strpbrk}}{{mono|strpbrk}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/strpbrk |title=strpbrk - cppreference.com |publisher=En.cppreference.com |date=2013-05-31 |access-date=2014-03-06}}</ref>
| {{anchor|wcspbrk}}{{mono|wcspbrk}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/wide/wcspbrk |title=wcspbrk - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
| {{anchor|wcspbrk}}{{mono|wcspbrk}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/wide/wcspbrk |title=wcspbrk - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
|एक स्ट्रिंग में एक सेट में बाइट की पहली घटना ढूँढता है।  
|स्ट्रिंग में एक समूह में बाइट की पहली घटना को खोजता है।  
|-
|-
| {{anchor|strstr}}{{mono|strstr}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/strstr |title=strstr - cppreference.com |publisher=En.cppreference.com |date=2013-10-16 |access-date=2014-03-06}}</ref>
| {{anchor|strstr}}{{mono|strstr}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/strstr |title=strstr - cppreference.com |publisher=En.cppreference.com |date=2013-10-16 |access-date=2014-03-06}}</ref>
| {{anchor|wcsstr}}{{mono|wcsstr}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/wide/wcsstr |title=wcsstr - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
| {{anchor|wcsstr}}{{mono|wcsstr}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/wide/wcsstr |title=wcsstr - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
| एक स्ट्रिंग में एक सबस्ट्रिंग की पहली घटना ढूँढता है।  
| स्ट्रिंग में एक उपस्ट्रिंग की पहली घटना को खोजता है।  
|-
|-
| {{anchor|strtok}}{{mono|strtok}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/strtok |title=strtok - cppreference.com |publisher=En.cppreference.com |date=2013-09-03 |access-date=2014-03-06}}</ref>
| {{anchor|strtok}}{{mono|strtok}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/strtok |title=strtok - cppreference.com |publisher=En.cppreference.com |date=2013-09-03 |access-date=2014-03-06}}</ref>
| {{anchor|wcstok}}{{mono|wcstok}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/wide/wcstok |title=wcstok - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
| {{anchor|wcstok}}{{mono|wcstok}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/wide/wcstok |title=wcstok - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
|एक स्ट्रिंग को टोकन में विभाजित करता है।  
|स्ट्रिंग को टोकन में विभाजित करता है।  
|-
|-
!विविध
!विविध
| {{anchor|strerror}}{{mono|strerror}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/strerror |title=strerror - cppreference.com |publisher=En.cppreference.com |date=2013-05-31 |access-date=2014-03-06}}</ref>
| {{anchor|strerror}}{{mono|strerror}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/strerror |title=strerror - cppreference.com |publisher=En.cppreference.com |date=2013-05-31 |access-date=2014-03-06}}</ref>
| {{n/a}}
| {{n/a}}
|त्रुटि कोड से प्राप्त संदेश वाली एक स्ट्रिंग लौटाता है।  
|त्रुटि कोड से प्राप्त संदेश वाली एक स्ट्रिंग वापस करता है।  
|-
|-
! rowspan=5 | मेमोरी प्रकलन (कंप्यूटर)
! rowspan=5 | मेमोरी प्रकलन (कंप्यूटर)
|{{anchor|memset}}{{mono|memset}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/memset |title=memset - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
|{{anchor|memset}}{{mono|memset}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/memset |title=memset - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
|{{anchor|wmemset}}{{mono|wmemset}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/wide/wmemset |title=wmemset - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
|{{anchor|wmemset}}{{mono|wmemset}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/wide/wmemset |title=wmemset - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
|एक बफ़र को बार-बार बाइट से भरता है।  
|बफ़र को बार-बार बाइट से भरता है।  
|-
|-
|{{anchor|memcpy}}{{mono|memcpy}}<ref name=memcpy-cppreference>{{cite web|url=https://en.cppreference.com/w/c/string/byte/memcpy |title=memcpy - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
|{{anchor|memcpy}}{{mono|memcpy}}<ref name=memcpy-cppreference>{{cite web|url=https://en.cppreference.com/w/c/string/byte/memcpy |title=memcpy - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
|{{anchor|wmemcpy}}{{mono|wmemcpy}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/wide/wmemcpy |title=wmemcpy - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
|{{anchor|wmemcpy}}{{mono|wmemcpy}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/wide/wmemcpy |title=wmemcpy - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
|एक बफ़र को दूसरे बफ़र में कॉपी करता है।  
|एक बफ़र को दूसरे बफ़र में परिवर्तित करता है।  
|-
|-
|{{anchor|memmove}}{{mono|memmove}}<ref name=memmove-cppreference>{{cite web|url=https://en.cppreference.com/w/c/string/byte/memmove |title=memmove - cppreference.com |publisher=En.cppreference.com |date=2014-01-25 |access-date=2014-03-06}}</ref>
|{{anchor|memmove}}{{mono|memmove}}<ref name=memmove-cppreference>{{cite web|url=https://en.cppreference.com/w/c/string/byte/memmove |title=memmove - cppreference.com |publisher=En.cppreference.com |date=2014-01-25 |access-date=2014-03-06}}</ref>
|{{anchor|wmemmove}}{{mono|wmemmove}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/wide/wmemmove |title=wmemmove - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
|{{anchor|wmemmove}}{{mono|wmemmove}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/wide/wmemmove |title=wmemmove - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
|एक बफ़र को दूसरे संभवतः ओवरलैपिंग बफ़र में कॉपी करता है।  
|एक बफ़र को दूसरे संभवतः ओवरलैपिंग बफ़र में परिवर्तित करता है।  
|-
|-
|{{anchor|memcmp}}{{mono|memcmp}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/memcmp |title=memcmp - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
|{{anchor|memcmp}}{{mono|memcmp}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/memcmp |title=memcmp - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
Line 144: Line 144:
|{{anchor|memchr}}{{mono|memchr}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/memchr |title=memchr - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
|{{anchor|memchr}}{{mono|memchr}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/memchr |title=memchr - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
|{{anchor|wmemchr}}{{mono|wmemchr}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/wide/wmemchr |title=wmemchr - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
|{{anchor|wmemchr}}{{mono|wmemchr}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/wide/wmemchr |title=wmemchr - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
| बफ़र में बाइट की पहली घटना ढूँढता है।  
| बफ़र में बाइट की पहली घटना को खोजता है।  
|-
|-
| colspan=4 |<references group="note"/>
| colspan=4 |<references group="note"/>
|}
|}
 
==== बहु-बाइट फंक्शन ====
 
==== मल्टीबाइट कार्य ====
{| class="wikitable floatleft" style="margin-right: 1.5em;"
{| class="wikitable floatleft" style="margin-right: 1.5em;"
|-
|-
Line 157: Line 155:
|-
|-
| {{anchor|mblen}}{{mono|mblen}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/multibyte/mblen |title=mblen - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
| {{anchor|mblen}}{{mono|mblen}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/multibyte/mblen |title=mblen - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
|अगले मल्टीबाइट कैरेक्टर में बाइट्स की संख्या लौटाता है।
|अगले बहु-बाइट लिपि में बाइट्स की संख्या वापस करता है।
|-
|-
| {{anchor|mbtowc}}{{mono|mbtowc}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/multibyte/mbtowc |title=mbtowc - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
| {{anchor|mbtowc}}{{mono|mbtowc}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/multibyte/mbtowc |title=mbtowc - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
|अगले मल्टीबाइट कैरेक्टर को विस्तृत कैरेक्टर में परिवर्तित करता है।
|अगले बहु-बाइट लिपि को विस्तृत लिपि में परिवर्तित करता है।
|-
|-
| {{anchor|wctomb}}{{mono|wctomb}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/multibyte/wctomb |title=wctomb - cppreference.com |publisher=En.cppreference.com |date=2014-02-04 |access-date=2014-03-06}}</ref>
| {{anchor|wctomb}}{{mono|wctomb}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/multibyte/wctomb |title=wctomb - cppreference.com |publisher=En.cppreference.com |date=2014-02-04 |access-date=2014-03-06}}</ref>
| एक विस्तृत चरित्र को उसके मल्टीबाइट प्रतिनिधित्व में परिवर्तित करता है।
| एक विस्तृत चरित्र को उसके बहु-बाइट प्रतिनिधित्व में परिवर्तित करता है।
|-
|-
| {{anchor|mbstowcs}}{{mono|mbstowcs}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/multibyte/mbstowcs |title=mbstowcs - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
| {{anchor|mbstowcs}}{{mono|mbstowcs}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/multibyte/mbstowcs |title=mbstowcs - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
|एक मल्टीबाइट स्ट्रिंग को एक विस्तृत स्ट्रिंग में परिवर्तित करता है।
|बहु-बाइट स्ट्रिंग को एक विस्तृत स्ट्रिंग में परिवर्तित करता है।
|-
|-
| {{anchor|wcstombs}}{{mono|wcstombs}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/multibyte/wcstombs |title=wcstombs - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
| {{anchor|wcstombs}}{{mono|wcstombs}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/multibyte/wcstombs |title=wcstombs - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
|एक विस्तृत स्ट्रिंग को मल्टीबाइट स्ट्रिंग में परिवर्तित करता है।
|एक विस्तृत स्ट्रिंग को बहु-बाइट स्ट्रिंग में परिवर्तित करता है।
|-
|-
| {{anchor|btowc}}{{mono|btowc}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/multibyte/btowc |title=btowc - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
| {{anchor|btowc}}{{mono|btowc}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/multibyte/btowc |title=btowc - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
Line 178: Line 176:
|-
|-
| {{anchor|mbsinit}}{{mono|mbsinit}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/multibyte/mbsinit |title=mbsinit - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
| {{anchor|mbsinit}}{{mono|mbsinit}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/multibyte/mbsinit |title=mbsinit - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
|जाँचता है कि क्या कोई राज्य वस्तु प्रारंभिक स्थिति का प्रतिनिधित्व करती है।
|जाँचता है कि क्या कोई स्थित वस्तु प्रारंभिक स्थिति का प्रतिनिधित्व करती है।
|-
|-
| {{anchor|mbrlen}}{{mono|mbrlen}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/multibyte/mbrlen |title=mbrlen - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
| {{anchor|mbrlen}}{{mono|mbrlen}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/multibyte/mbrlen |title=mbrlen - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
|दिए गए राज्य में अगले मल्टीबाइट कैरेक्टर में बाइट्स की संख्या लौटाता है।
|दी गई स्थिति में अगले बहु-बाइट लिपि में बाइट्स की संख्या वापस करता है।
|-
|-
| {{anchor|mbrtowc}}{{mono|mbrtowc}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/multibyte/mbrtowc |title=mbrtowc - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
| {{anchor|mbrtowc}}{{mono|mbrtowc}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/multibyte/mbrtowc |title=mbrtowc - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
|दिए गए राज्य में अगले मल्टीबाइट कैरेक्टर को विस्तृत कैरेक्टर में परिवर्तित करता है।
|दी गई स्थिति में अगले बहु-बाइट लिपि को विस्तृत लिपि में परिवर्तित करता है।
|-
|-
| {{anchor|wcrtomb}}{{mono|wcrtomb}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/multibyte/wcrtomb |title=wcrtomb - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
| {{anchor|wcrtomb}}{{mono|wcrtomb}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/multibyte/wcrtomb |title=wcrtomb - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
|दिए गए राज्य में एक विस्तृत चरित्र को उसके मल्टीबाइट प्रतिनिधित्व में परिवर्तित करता है।
|दी गई स्थिति में एक विस्तृत char को उसके बहु-बाइट प्रतिनिधित्व में परिवर्तित करता है।
|-
|-
| {{anchor|mbsrtowcs}}{{mono|mbsrtowcs}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/multibyte/mbsrtowcs |title=mbsrtowcs - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
| {{anchor|mbsrtowcs}}{{mono|mbsrtowcs}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/multibyte/mbsrtowcs |title=mbsrtowcs - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
|किसी मल्टीबाइट स्ट्रिंग को दी गई स्थिति में एक विस्तृत स्ट्रिंग में परिवर्तित करता है।
|किसी बहु-बाइट स्ट्रिंग को दी गई स्थिति में एक विस्तृत स्ट्रिंग में परिवर्तित करता है।
|-
|-
| {{anchor|wcsrtombs}}{{mono|wcsrtombs}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/multibyte/wcsrtombs |title=wcsrtombs - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
| {{anchor|wcsrtombs}}{{mono|wcsrtombs}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/multibyte/wcsrtombs |title=wcsrtombs - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
|दी गई स्थिति में एक विस्तृत स्ट्रिंग को मल्टीबाइट स्ट्रिंग में परिवर्तित करता है।
|दी गई स्थिति में एक विस्तृत स्ट्रिंग को बहु-बाइट स्ट्रिंग में परिवर्तित करता है।
|}
|}
ये सभी कार्य एक सूचक को a पर ले जाते हैं। {{samp|mbstate_t}} ऑब्जेक्ट जिसे कॉल करने वाले को बनाए रखना चाहिए। यह मूल रूप से में शिफ्ट राज्यों को ट्रैक करने का इरादा था {{samp|mb}} एनकोडिंग, लेकिन आधुनिक वाले जैसे UTF-8 को इसकी आवश्यकता नहीं है। हालाँकि इन कार्यों को इस धारणा पर डिज़ाइन किया गया था कि {{samp|wc}} एन्कोडिंग एक चर-चौड़ाई एन्कोडिंग नहीं है। और इस प्रकार बिल्कुल एक से निपटने के लिए डिज़ाइन किया गया है। {{samp|wchar_t}} एक समय में, स्ट्रिंग पॉइंटर का उपयोग करने के बजाय इसे मान से पास करना। जैसा कि UTF-16 एक चर-चौड़ाई एन्कोडिंग है, {{samp|mbstate_t}विस्तृत एन्कोडिंग में सरोगेट जोड़े का ट्रैक रखने के लिए } का पुन: उपयोग किया गया है, हालांकि कॉलर को अभी भी पता लगाना चाहिए और कॉल करना चाहिए {{samp|mbtowc}} एक वर्ण के लिए दो बार।<ref>{{cite web |url=https://www.gnu.org/software/libc/manual/html_node/Keeping-the-state.html |title=6.3.2 Representing the state of the conversion |access-date=2017-01-31 | website=The GNU C Library}}</ref><ref>{{cite web |url=https://git.musl-libc.org/cgit/musl/tree/src/multibyte/c16rtomb.c |title=root/src/multibyte/c16rtomb.c |access-date=2017-01-31 }}</ref><ref>{{cite web |url=https://svnweb.freebsd.org/base/stable/11/lib/libc/locale/c16rtomb.c?view=markup |title=Contents of /stable/11/lib/libc/locale/c16rtomb.c |access-date=2017-01-31 }}</ref>
ये सभी फ़ंक्शन एक पॉइंटर को {{samp|mbstate_t}} वस्तु पर ले जाते हैं जिससे कॉल करने वाले फ़ंक्शन को बनाए रखना होगा। इसका उद्देश्य मूल रूप से एमबी एनकोडिंग में परिवर्तन की स्थिति को नियंत्रित करना था, लेकिन यूटीएफ-8 जैसे आधुनिक एनकोडिंग को इसकी आवश्यकता नहीं है। हालाँकि इन फ़ंक्शन को इस धारणा पर डिज़ाइन किया गया था कि {{samp|wc}} एन्कोडिंग एक चर-चौड़ाई एन्कोडिंग नहीं है और इस प्रकार एक समय में बिल्कुल एक {{samp|wchar_t}} का सामना करने के लिए डिज़ाइन किया गया है। इसे स्ट्रिंग पॉइंटर का उपयोग करने के अतिरिक्त मान से पास किया जाता है चूँकि यूटीएफ-16 एक चर-चौड़ाई एन्कोडिंग है, {{samp|mbstate_t}} को व्यापक एन्कोडिंग में सरोगेट जोड़े का नियंत्रण रखने के लिए पुन: उपयोग किया गया है, हालांकि कॉल करने वाले फ़ंक्शन को अभी भी एक ही वर्ण के लिए{{samp|mbtowc}} का दो बार पता लगाना और कॉल करना होता है।<ref>{{cite web |url=https://www.gnu.org/software/libc/manual/html_node/Keeping-the-state.html |title=6.3.2 Representing the state of the conversion |access-date=2017-01-31 | website=The GNU C Library}}</ref><ref>{{cite web |url=https://git.musl-libc.org/cgit/musl/tree/src/multibyte/c16rtomb.c |title=root/src/multibyte/c16rtomb.c |access-date=2017-01-31 }}</ref><ref>{{cite web |url=https://svnweb.freebsd.org/base/stable/11/lib/libc/locale/c16rtomb.c?view=markup |title=Contents of /stable/11/lib/libc/locale/c16rtomb.c |access-date=2017-01-31 }}</ref>


{{Clear}}
{{Clear}}


==={{anchor|stdlib.h}}संख्यात्मक रूपांतरण===
===संख्यात्मक रूपांतरण{{anchor|stdlib.h}}===
{| class="wikitable floatleft" style="margin-right: 1.5em;"
{| class="wikitable floatleft" style="margin-right: 1.5em;"
|-
|-
! Byte<br>string
! बाइट
! Wide<br>string
स्ट्रिंग
! Description<ref group="note">Here ''string'' refers either to byte string or wide string</ref>
! वाइड <br>स्ट्रिंग
! विवरण
|-
|-
| {{anchor|atof}}{{mono|atof}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/atof |title=atof - cppreference.com |publisher=En.cppreference.com |date=2013-05-31 |access-date=2014-03-06}}</ref>
| {{anchor|atof}}{{mono|atof}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/atof |title=atof - cppreference.com |publisher=En.cppreference.com |date=2013-05-31 |access-date=2014-03-06}}</ref>
| {{n/a}}
| {{n/a}}
| converts a string to a floating-point value ('atof' means 'ASCII to float')
| एक स्ट्रिंग को फ़्लोटिंग-पॉइंट मान में परिवर्तित करता है जहाँ 'atof' का अर्थ एएससीआईआई फ़्लोट' है।
|-
|-
| {{anchor|atoi|atol|atoll}}{{mono|atoi}}<br />{{mono|atol}}<br />{{mono|atoll}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/atoi |title=atoi, atol, atoll - cppreference.com |publisher=En.cppreference.com |date=2014-01-18 |access-date=2014-03-06}}</ref>
| {{anchor|atoi|atol|atoll}}{{mono|atoi}}<br />{{mono|atol}}<br />{{mono|atoll}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/atoi |title=atoi, atol, atoll - cppreference.com |publisher=En.cppreference.com |date=2014-01-18 |access-date=2014-03-06}}</ref>
| {{n/a}}
| {{n/a}}
| converts a string to an integer ([[C99]]) ('atoi' means 'ASCII to integer')
| एक स्ट्रिंग को पूर्णांक (सी-99) में परिवर्तित करता है, जहाँ 'atof' का अर्थ एएससीआईआई पूर्णांक है।
|-
|-
| {{anchor|strtof|strtod|strtold}}{{mono|strtof}} ([[C99]])<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/strtof |title=strtof, strtod, strtold - cppreference.com |publisher=En.cppreference.com |date=2014-02-04 |access-date=2014-03-06}}</ref><br />{{mono|strtod}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/strtod |title=strtof, strtod, strtold - cppreference.com |publisher=En.cppreference.com |date=2014-02-04 |access-date=2014-03-06}}</ref><br />{{mono|strtold}} ([[C99]])<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/strtold |title=strtof, strtod, strtold - cppreference.com |publisher=En.cppreference.com |date=2014-02-04 |access-date=2014-03-06}}</ref>
| {{anchor|strtof|strtod|strtold}}{{mono|strtof}} ([[C99]])<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/strtof |title=strtof, strtod, strtold - cppreference.com |publisher=En.cppreference.com |date=2014-02-04 |access-date=2014-03-06}}</ref><br />{{mono|strtod}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/strtod |title=strtof, strtod, strtold - cppreference.com |publisher=En.cppreference.com |date=2014-02-04 |access-date=2014-03-06}}</ref><br />{{mono|strtold}} ([[C99]])<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/strtold |title=strtof, strtod, strtold - cppreference.com |publisher=En.cppreference.com |date=2014-02-04 |access-date=2014-03-06}}</ref>
| {{anchor|wcstof|wcstod|wcstold}}{{mono|wcstof}} ([[C99]])<ref>{{cite web|url=https://en.cppreference.com/w/c/string/wide/wcstof |title=wcstof, wcstod, wcstold - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref><br />{{mono|wcstod}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/wide/wcstod |title=wcstof, wcstod, wcstold - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref><br />{{mono|wcstold}} ([[C99]])<ref>{{cite web|url=http://en.cppreference.com/w/c/string/wide/wcstold |title=wcstof, wcstod, wcstold - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
| {{anchor|wcstof|wcstod|wcstold}}{{mono|wcstof}} ([[C99]])<ref>{{cite web|url=https://en.cppreference.com/w/c/string/wide/wcstof |title=wcstof, wcstod, wcstold - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref><br />{{mono|wcstod}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/wide/wcstod |title=wcstof, wcstod, wcstold - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref><br />{{mono|wcstold}} ([[C99]])<ref>{{cite web|url=http://en.cppreference.com/w/c/string/wide/wcstold |title=wcstof, wcstod, wcstold - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
| converts a string to a floating-point value
|यह स्ट्रिंग को फ़्लोटिंग-पॉइंट मान में परिवर्तित करता है।
|-
|-
| {{anchor|strtol|strtoll}}{{mono|strtol}}<br />{{mono|strtoll}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/strtol |title=strtol, strtoll - cppreference.com |publisher=En.cppreference.com |date=2014-02-04 |access-date=2014-03-06}}</ref>
| {{anchor|strtol|strtoll}}{{mono|strtol}}<br />{{mono|strtoll}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/strtol |title=strtol, strtoll - cppreference.com |publisher=En.cppreference.com |date=2014-02-04 |access-date=2014-03-06}}</ref>
| {{anchor|wcstol|wcstoll}}{{mono|wcstol}}<br />{{mono|wcstoll}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/wide/wcstol |title=wcstol, wcstoll - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
| {{anchor|wcstol|wcstoll}}{{mono|wcstol}}<br />{{mono|wcstoll}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/wide/wcstol |title=wcstol, wcstoll - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
| converts a string to a signed integer
|यह स्ट्रिंग को एक हस्ताक्षरित पूर्णांक में परिवर्तित करता है।
|-
|-
| {{anchor|strtoul|strtoull}}{{mono|strtoul}}<br />{{mono|strtoull}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/strtoul |title=strtoul, strtoull - cppreference.com |publisher=En.cppreference.com |date=2014-02-04 |access-date=2014-03-06}}</ref>
| {{anchor|strtoul|strtoull}}{{mono|strtoul}}<br />{{mono|strtoull}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/byte/strtoul |title=strtoul, strtoull - cppreference.com |publisher=En.cppreference.com |date=2014-02-04 |access-date=2014-03-06}}</ref>
| {{anchor|wcstoul|wcstoull}}{{mono|wcstoul}}<br />{{mono|wcstoull}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/wide/wcstoul |title=wcstoul, wcstoull - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
| {{anchor|wcstoul|wcstoull}}{{mono|wcstoul}}<br />{{mono|wcstoull}}<ref>{{cite web|url=https://en.cppreference.com/w/c/string/wide/wcstoul |title=wcstoul, wcstoull - cppreference.com |publisher=En.cppreference.com |access-date=2014-03-06}}</ref>
| converts a string to an unsigned integer
|यह स्ट्रिंग को अहस्ताक्षरित पूर्णांक में परिवर्तित करता है।
|-
|-
| colspan=3 |<references group="note"/>
| colspan=3 |<references group="note"/>
|}
|}
सी मानक पुस्तकालय में संख्यात्मक रूपांतरणों के लिए कई कार्य हैं।। बाइट स्ट्रिंग्स से निपटने वाले कार्यों को परिभाषित किया गया है। {{code|stdlib.h}} है। डर ({{code|cstdlib}} सी ++ में शीर्षलेख)। व्यापक स्ट्रिंग्स से निपटने वाले कार्यों को इसमें परिभाषित किया गया है। {{code|wchar.h}} है। डर ({{code|cwchar}} सी ++ में शीर्षलेख)।
सी मानक लाइब्रेरी में संख्यात्मक रूपांतरण के लिए कई फ़ंक्शन सम्मिलित हैं बाइट स्ट्रिंग का सामना करने वाले फ़ंक्शन {{code|stdlib.h}} हेडर (C++ में {{code|cstdlib}} हेडर) में परिभाषित किए गए हैं। विस्तृत स्ट्रिंग का सामना करने वाले फ़ंक्शन को {{code|wchar.h}} हेडर (C++ में {{code|cwchar}}r हेडर) में परिभाषित किया गया है।
 
फ़ंक्शन {{code|strchr}}, {{code|bsearch}}, {{code|strpbrk}}, {{code|strrchr}}, {{code|strstr}}, {{code|memchr}} और उनके विस्तृत समकक्ष स्थिरांक-शुद्धता नहीं हैं, क्योंकि वे एक {{code|const}} स्ट्रिंग पॉइंटर को स्वीकृत करते हैं और स्ट्रिंग के भीतर एक गैर-{{code|const}} पॉइंटर को वापस करते हैं। इसे सी-23 में ठीक कर दिया गया है।<ref name="N3020">{{cite web |title=WG14-N3020 : Qualifier-preserving standard library functions, v4 |url=https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3020.pdf |website=open-std.org |date=2022-06-13}}</ref>
इसके अतिरिक्त मानक संशोधन 1 (सी-95) के बाद से {{code|atoxx}} फ़ंक्शंस को {{code|strtoxxx}} फ़ंक्शंस द्वारा सम्मिलित माना जाता है, जिस कारण से न तो सी-95 और न ही कोई बाद का मानक इन फ़ंक्शंस के विस्तृत-चरित्र संस्करण प्रदान करता है {{code|atoxx}} के विरुद्ध तर्क यह है कि वे त्रुटि और {{code|0}} के बीच अंतर नहीं करते हैं।<ref>[http://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf C99 Rationale, 7.20.1.1]</ref>{{clear}}
 
 
 
 
 
 
 
 
 


कार्य {{code|strchr}}, {{code|bsearch}}, {{code|strpbrk}}, {{code|strrchr}}, {{code|strstr}}, {{code|memchr}} और उनके विस्तृत प्रतिरूप स्थिरांक-शुद्धता नहीं हैं। | स्थिरांक-सही, क्योंकि वे a स्वीकार करते हैं। {{code|const}} स्ट्रिंग पॉइंटर और एक गैर-वापसी करें{{code|const}} स्ट्रिंग के भीतर सूचक। यह C23 (C मानक संशोधन) में तय किया गया है। <ref name=N3020>{{cite web |title=WG14-N3020 : Qualifier-preserving standard library functions, v4 |url=https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3020.pdf |website=open-std.org |date=2022-06-13}}</ref>
इसके अलावा, मानक संशोधन 1 (C95) के बाद से, {{code|atoxx}} कार्यों को इसके द्वारा समाहित माना जाता है। {{code|strtoxxx}} कार्य करता है, जिसके कारण न तो C95 और न ही कोई बाद का मानक इन कार्यों के व्यापक-वर्ण संस्करण प्रदान करता है। के खिलाफ तर्क {{code|atoxx}} यह है। कि वे त्रुटि और a के बीच अंतर नहीं करते हैं। {{code|0}}.<ref>[http://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf C99 Rationale, 7.20.1.1]</ref>{{clear}}


== लोकप्रिय एक्सटेंशन ==
 
== लोकप्रिय विस्तारण ==
{| class="wikitable"
{| class="wikitable"
|-
|-
! Name !! Platform !! Description
! नाम !! प्लेटफॉर्म !! विवरण
|-
|-
| {{anchor|bzero}}{{mono|bzero}}<ref>{{cite web|url=http://pubs.opengroup.org/onlinepubs/009695399/functions/bzero.html |title=bzero |publisher=[[The Open Group]] |access-date=2017-11-27}}</ref><ref name="explicit_bzero">{{cite web|url=https://man.openbsd.org/explicit_bzero.3 |title=bzero(3) |publisher=[[OpenBSD]] |access-date=2017-11-27}}</ref>
| {{anchor|bzero}}{{mono|bzero}}<ref>{{cite web|url=http://pubs.opengroup.org/onlinepubs/009695399/functions/bzero.html |title=bzero |publisher=[[The Open Group]] |access-date=2017-11-27}}</ref><ref name="explicit_bzero">{{cite web|url=https://man.openbsd.org/explicit_bzero.3 |title=bzero(3) |publisher=[[OpenBSD]] |access-date=2017-11-27}}</ref>
|| [[POSIX]], [[BSD]]  
|| [[POSIX|पॉज़िक्स]], [[BSD|बीएसडी]]
|| Fills a buffer with zero bytes, deprecated by {{mono|memset}}
||एक बफ़र को शून्य बाइट्स से भरता है, जिसे मेम समूह द्वारा बहिष्कृत किया गया है।
|-
|-
| {{anchor|memccpy}}{{mono|memccpy}}<ref>{{cite web|url=http://pubs.opengroup.org/onlinepubs/009695399/functions/memccpy.html |title=memccpy |publisher=Pubs.opengroup.org |access-date=2014-03-06}}</ref>  
| {{anchor|memccpy}}{{mono|memccpy}}<ref>{{cite web|url=http://pubs.opengroup.org/onlinepubs/009695399/functions/memccpy.html |title=memccpy |publisher=Pubs.opengroup.org |access-date=2014-03-06}}</ref>  
|| [[System V Interface Definition|SVID]], POSIX
|| [[System V Interface Definition|एसवीआईडी]], पॉज़िक्स
|| Part of the C standard since [[C23 (C standard revision)|C23]], copies between two non-overlapping memory areas, stopping when a given byte is found.
||सी-23 के बाद से C मानक का भाग दो गैर-अतिव्यापी मेमोरी क्षेत्रों के बीच की प्रतियां एक दिये गए बाइट के प्राप्त होने पर स्थित हो जाती है।
|-
|-
| {{anchor|mempcpy}}{{mono|mempcpy}}<ref>{{cite web|url=https://www.kernel.org/doc/man-pages/online/pages/man3/mempcpy.3.html |title=mempcpy(3) - Linux manual page |publisher=Kernel.org |access-date=2014-03-06}}</ref>  
| {{anchor|mempcpy}}{{mono|mempcpy}}<ref>{{cite web|url=https://www.kernel.org/doc/man-pages/online/pages/man3/mempcpy.3.html |title=mempcpy(3) - Linux manual page |publisher=Kernel.org |access-date=2014-03-06}}</ref>  
|| GNU
|| जीएनयू
|| a variant of [[#memcpy|{{mono|memcpy}}]] returning a pointer to the byte following the last written byte
||अंतिम लिखित बाइट के बाद बाइट पर एक पॉइंटर वापस करने वाली memcpy का एक प्रकार
|-
|-
| {{anchor|strcasecmp}}{{mono|strcasecmp}}<ref>{{cite web|url=https://www.kernel.org/doc/man-pages/online/pages/man3/strcasecmp.3.html |title=strcasecmp(3) - Linux manual page |publisher=Kernel.org |access-date=2014-03-06}}</ref>  
| {{anchor|strcasecmp}}{{mono|strcasecmp}}<ref>{{cite web|url=https://www.kernel.org/doc/man-pages/online/pages/man3/strcasecmp.3.html |title=strcasecmp(3) - Linux manual page |publisher=Kernel.org |access-date=2014-03-06}}</ref>  
|| POSIX, BSD
|| पॉज़िक्स, बीएसडी
|| case-insensitive versions of {{mono|strcmp}}
||strcmp का असंवेदनशील संस्करण
|-
|-
| {{anchor|strcat_s}}{{mono|strcat_s}}<ref name=strcat_s>{{cite web|url=https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strcat-s-wcscat-s-mbscat-s?view=msvc-170 |title=strcat_s, wcscat_s, _mbscat_s |publisher=docs.microsoft.com |access-date=2022-04-22}}</ref>  
| {{anchor|strcat_s}}{{mono|strcat_s}}<ref name=strcat_s>{{cite web|url=https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strcat-s-wcscat-s-mbscat-s?view=msvc-170 |title=strcat_s, wcscat_s, _mbscat_s |publisher=docs.microsoft.com |access-date=2022-04-22}}</ref>  
|| Windows
|| विंडोज़
|| a variant of [[#strcat|{{mono|strcat}}]] that checks the destination buffer size before copying
|| [[#strcat|{{mono|strcat}}]] का एक प्रकार जो अनुकरण करने से पहले गंतव्य बफ़र आकार की जाँच करता है।
|-
|-
| {{anchor|strcpy_s}}{{mono|strcpy_s}}<ref name=strcpy_s>{{cite web|url=https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strcpy-s-wcscpy-s-mbscpy-s?view=msvc-170 |title=strcpy_s, wcscpy_s, _mbscpy_s, _mbscpy_s_l |publisher=docs.microsoft.com |access-date=2022-04-22}}</ref>  
| {{anchor|strcpy_s}}{{mono|strcpy_s}}<ref name=strcpy_s>{{cite web|url=https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strcpy-s-wcscpy-s-mbscpy-s?view=msvc-170 |title=strcpy_s, wcscpy_s, _mbscpy_s, _mbscpy_s_l |publisher=docs.microsoft.com |access-date=2022-04-22}}</ref>  
|| Windows
|| विंडोज़
|| a variant of [[#strcpy|{{mono|strcpy}}]] that checks the destination buffer size before copying
|| [[#strcpy|strcpy]] का एक प्रकार जो अनुकरण करने से पहले गंतव्य बफ़र आकार की जाँच करता है।
|-
|-
| {{anchor|strdup}}{{mono|strdup}}<ref>{{cite web|url=http://pubs.opengroup.org/onlinepubs/009695399/functions/strdup.html |title=strdup |publisher=Pubs.opengroup.org |access-date=2014-03-06}}</ref>  
| {{anchor|strdup}}{{mono|strdup}}<ref>{{cite web|url=http://pubs.opengroup.org/onlinepubs/009695399/functions/strdup.html |title=strdup |publisher=Pubs.opengroup.org |access-date=2014-03-06}}</ref>  
|| POSIX
|| पॉज़िक्स
|| Part of the C standard since C23, allocates and duplicates a string
||सी-23 के बाद से सी मानक का भाग एक स्ट्रिंग को आवंटित और प्रतिलिपित करता है।
|-
|-
| {{anchor|strerror_r}}{{mono|strerror_r}}<ref>{{cite web|url=http://man7.org/linux/man-pages/man3/strerror.3.html |title=strerror(3) - Linux manual page |publisher=man7.org |access-date=2019-11-03}}</ref>  
| {{anchor|strerror_r}}{{mono|strerror_r}}<ref>{{cite web|url=http://man7.org/linux/man-pages/man3/strerror.3.html |title=strerror(3) - Linux manual page |publisher=man7.org |access-date=2019-11-03}}</ref>  
|| POSIX&nbsp;1,&nbsp;GNU
|| पॉज़िक्स&nbsp;1,&nbsp;जीएनयू
|| a variant of [[#strerror|{{mono|strerror}}]] that is thread-safe. The GNU version is incompatible with the POSIX one.
|| [[#strerror|{{mono|strerror}}]] का एक प्रकार जो थ्रेड-सुरक्षित है जीएनयू संस्करण पॉज़िक्स के साथ असंगत है।
|-
|-
| {{anchor|stricmp}}{{mono|stricmp}}<ref>{{cite web|url=http://www.cprogrammingexpert.com/C/Tutorial/strings/stricmp.aspx |title=String &#124; stricmp() |publisher=C Programming Expert.com |access-date=2014-03-06}}</ref>  
| {{anchor|stricmp}}{{mono|stricmp}}<ref>{{cite web|url=http://www.cprogrammingexpert.com/C/Tutorial/strings/stricmp.aspx |title=String &#124; stricmp() |publisher=C Programming Expert.com |access-date=2014-03-06}}</ref>  
|| Windows
|| विंडोज़
|| case-insensitive versions of {{mono|strcmp}}
||strcmp का असंवेदनशील संस्करण
|-
|-
| {{anchor|strlcpy}}{{mono|strlcpy}}<ref name="strlcat_strlcpy">{{cite web|url=https://man.openbsd.org/OpenBSD-5.9/man3/strlcat.3 |title= strlcpy, strlcat — size-bounded string copying and concatenation |publisher=[[OpenBSD]] |access-date=2016-05-26}}</ref>  
| {{anchor|strlcpy}}{{mono|strlcpy}}<ref name="strlcat_strlcpy">{{cite web|url=https://man.openbsd.org/OpenBSD-5.9/man3/strlcat.3 |title= strlcpy, strlcat — size-bounded string copying and concatenation |publisher=[[OpenBSD]] |access-date=2016-05-26}}</ref>  
|| BSD, Solaris
|| बीएसडी, सोलारिस
|| a variant of [[#strcpy|{{mono|strcpy}}]] that truncates the result to fit in the destination buffer<ref name="strl">{{cite web | url=https://www.sudo.ws/todd/papers/strlcpy.html | title=strlcpy and strlcat – consistent, safe, string copy and concatenation. | author=Todd C. Miller |author2=Theo de Raadt | year=1999 | publisher=USENIX '99 }}</ref>
|| [[#strcat|strcpy]] का एक प्रकार जो गंतव्य बफ़र में प्रयुक्त होने के लिए परिणाम को छोटा कर देता है।<ref name="strl">{{cite web | url=https://www.sudo.ws/todd/papers/strlcpy.html | title=strlcpy and strlcat – consistent, safe, string copy and concatenation. | author=Todd C. Miller |author2=Theo de Raadt | year=1999 | publisher=USENIX '99 }}</ref>
|-
|-
| {{anchor|strlcat}}{{mono|strlcat}}<ref name="strlcat_strlcpy" />  
| {{anchor|strlcat}}{{mono|strlcat}}<ref name="strlcat_strlcpy" />  
|| BSD, Solaris
|| बीएसडी, सोलारिस
|| a variant of [[#strcat|{{mono|strcat}}]] that truncates the result to fit in the destination buffer<ref name="strl" />
|| [[#strcat|{{mono|strcat}}]] का एक प्रकार जो गंतव्य बफ़र में प्रयुक्त होने के लिए परिणाम को छोटा कर देता है।<ref name="strl" />
|-
|-
| {{anchor|strsignal}}{{mono|strsignal}}<ref>{{cite web|url=https://pubs.opengroup.org/onlinepubs/9699919799/functions/strsignal.html |title=strsignal |publisher=Pubs.opengroup.org |access-date=2014-03-06}}</ref>  
| {{anchor|strsignal}}{{mono|strsignal}}<ref>{{cite web|url=https://pubs.opengroup.org/onlinepubs/9699919799/functions/strsignal.html |title=strsignal |publisher=Pubs.opengroup.org |access-date=2014-03-06}}</ref>  
|| [[POSIX|POSIX:2008]]  
|| [[POSIX|पॉज़िक्स:2008]]
|| returns string representation of a [[Signal (computing)|signal code]]. Not thread safe.
||संकेत कोड का स्ट्रिंग प्रतिनिधित्व वापस करता है कि थ्रेड सुरक्षित नहीं है।
|-
|-
| {{anchor|strtok_r}}{{mono|strtok_r}}<ref>{{cite web|url=https://pubs.opengroup.org/onlinepubs/009695399/functions/strtok.html |title=strtok |publisher=Pubs.opengroup.org |access-date=2014-03-06}}</ref>  
| {{anchor|strtok_r}}{{mono|strtok_r}}<ref>{{cite web|url=https://pubs.opengroup.org/onlinepubs/009695399/functions/strtok.html |title=strtok |publisher=Pubs.opengroup.org |access-date=2014-03-06}}</ref>  
|| POSIX
|| पॉज़िक्स
|| a variant of [[#strtok|{{mono|strtok}}]] that is thread-safe
|| [[#strtok|{{mono|strtok}}]] का एक प्रकार जो थ्रेड-सुरक्षित है।
|-
|-
| {{anchor|char8_t}}{{mono|char8_t}}<ref>{{Cite web |title=char, wchar_t, char8_t, char16_t, char32_t |url=https://docs.microsoft.com/en-us/cpp/cpp/char-wchar-t-char16-t-char32-t |access-date=2022-08-01 |website=docs.microsoft.com |language=en-us}}</ref>
| {{anchor|char8_t}}{{mono|char8_t}}<ref>{{Cite web |title=char, wchar_t, char8_t, char16_t, char32_t |url=https://docs.microsoft.com/en-us/cpp/cpp/char-wchar-t-char16-t-char32-t |access-date=2022-08-01 |website=docs.microsoft.com |language=en-us}}</ref>
|| Windows
|| विंडोज़
|| Part of the C standard since C23, in {{mono|<uchar.h>}}, a type that is suitable for storing UTF-8 characters.
|| सी-23 के बाद से सी मानक का भाग <uchar.h> में एक प्रकार जो यूटीएफ-8 वर्णों को संग्रहीत करने के लिए उपयुक्त है।
|-
|-
| {{anchor|char16_t}}{{mono|char16_t}}<ref name="uchar">{{Cite web|title =&lt;cuchar&gt; (uchar.h)|url=https://cplusplus.com/reference/cuchar/|language=en-us}}</ref>
| {{anchor|char16_t}}{{mono|char16_t}}<ref name="uchar">{{Cite web|title =&lt;cuchar&gt; (uchar.h)|url=https://cplusplus.com/reference/cuchar/|language=en-us}}</ref>
|| C99
|| C99
|| Part of the C standard since [[C11 (C standard revision)|C11]], in {{mono|<uchar.h>}}, a type capable of holding 16 bits even if {{mono|wchar_t}} is another size.
||सी-11 के बाद से सी मानक का भाग <uchar.h> एक प्रकार जो 16 बिट्स रखने में सक्षम है, यद्यपि wchar_t एक और आकार हो।
|-
|-
| {{anchor|char32_t}}{{mono|char32_t}}<ref name="uchar" />
| {{anchor|char32_t}}{{mono|char32_t}}<ref name="uchar" />
|| C99
|| C99
|| Part of the C standard since C11, in {{mono|<uchar.h>}}, a type capable of holding 32 bits even if {{mono|wchar_t}} is another size.
||सी-11 के बाद से सी मानक का भाग <uchar.h> एक प्रकार जो 32 बिट्स रखने में सक्षम है, यद्यपि wchar_t एक और आकार हो।
|}
|}
== प्रतिस्थापन ==
== प्रतिस्थापन ==


सी मानक पुस्तकालय # बफर अतिप्रवाह भेद्यता के बावजूद | प्रतिस्थापित करने के लिए अच्छी तरह से स्थापित आवश्यकता <code>strcat</code><ref name=strcat-cppreference/>और <code>strcpy</code><ref name=strcpy-cppreference/>उन कार्यों के साथ जो बफर ओवरफ्लो की अनुमति नहीं देते हैं कोई स्वीकृत मानक उत्पन्न नहीं हुआ है। यह आंशिक रूप से कई सी प्रोग्रामरों द्वारा गलत धारणा के कारण है। कि <code>strncat</code> और <code>strncpy</code> वांछित व्यवहार है। ; हालाँकि, इसके लिए कोई भी फ़ंक्शन डिज़ाइन नहीं किया गया था (उनका उद्देश्य अशक्त-गद्दीदार निश्चित-आकार के स्ट्रिंग बफ़र्स में हेरफेर करना था, आधुनिक सॉफ़्टवेयर में आमतौर पर कम उपयोग किया जाने वाला एक डेटा प्रारूप), और व्यवहार और तर्क गैर-सहज हैं। और अक्सर विशेषज्ञ द्वारा भी गलत तरीके से लिखे गए हैं।। प्रोग्रामर।<ref name="strl" />
बफर ओवरफ्लो की स्वीकृति न देने वाले फ़ंक्शंस के साथ <code>strcat</code><ref name=strcat-cppreference/>और <code>strcpy</code><ref name=strcpy-cppreference/> को प्रस्थापित करने की अच्छी तरह से स्थापित आवश्यकता के अतिरिक्त कोई स्वीकृत मानक उत्पन्न नहीं हुआ है। यह आंशिक रूप से कई सी प्रोग्रामर की गलत धारणा के कारण है कि <code>strncat</code> और <code>strncpy</code> में वांछित व्यवहार है। हालाँकि, इसके लिए कोई भी फ़ंक्शन डिज़ाइन नहीं किया गया था उनका उद्देश्य शून्य-पैडेड निश्चित-आकार स्ट्रिंग बफ़र्स में परिवर्तन करना था। एक डेटा प्रारूप जो आधुनिक सॉफ़्टवेयर में सामान्यतः कम उपयोग किया जाता है व्यवहार और तर्क गैर-सहज ज्ञान युक्त हैं और प्रायः विशेषज्ञ प्रोग्रामर द्वारा भी गलत तरीके से लिखे गए हैं।<ref name="strl" />


सबसे लोकप्रिय{{Efn|On GitHub, there are 7,813,206 uses of <code>strlcpy</code>, versus 38,644 uses of <code>strcpy_s</code> (and 15,286,150 uses of <code>strcpy</code>).{{Citation needed|date=February 2015}}}} प्रतिस्थापन हैं। <code>strlcat</code> और <code>strlcpy</code> कार्य, जो दिसंबर, 1998 में [[OpenBSD]] 2.4 में दिखाई दिए।<ref name="strl" /> ये फ़ंक्शन हमेशा गंतव्य बफर में एक एनयूएल लिखते हैं यदि आवश्यक हो तो परिणाम को छोटा कर देते हैं और आवश्यक बफर के आकार को वापस कर देते हैं जो ट्रंकेशन का पता लगाने की अनुमति देता है। और एक नया बफर बनाने के लिए एक आकार प्रदान करता है। जो छोटा नहीं होगा। कथित रूप से अक्षम होने के आधार पर उनकी आलोचना की गई है,<ref>{{cite web |url=https://www.openbsd.org/papers/portability.pdf |title=सुरक्षित पोर्टेबिलिटी|first1=Damien |last1=Miller |date=October 2005|access-date=26 June 2016 |quote=This [strlcpy and strlcat] API has been adopted by most modern operating systems and many standalone software packages [...]. The notable exception is the GNU standard C library, glibc, whose maintainer steadfastly refuses to include these improved APIs, labelling them "horribly inefficient BSD crap", despite prior evidence that they are faster is most cases than the APIs they replace.}}</ref> सी स्ट्रिंग्स (स्ट्रिंग के कुछ बेहतर वैकल्पिक रूप के बजाय) के उपयोग को प्रोत्साहित करना,<ref name="libc-alpha-discussion-1">[http://sources.redhat.com/ml/libc-alpha/ libc-alpha mailing list], selected messages from 8 August 2000 thread: [https://www.sourceware.org/ml/libc-alpha/2000-08/msg00053.html 53], [https://www.sourceware.org/ml/libc-alpha/2000-08/msg00060.html 60], [https://www.sourceware.org/ml/libc-alpha/2000-08/msg00061.html 61]</ref><ref>[https://lwn.net/Articles/507319/ The ups and downs of strlcpy(); LWN.net]</ref> और अन्य संभावित त्रुटियों को छिपाना।<ref>{{cite web |title=strlcpy() को glibc में जोड़ना|url=https://lwn.net/Articles/612244/ |website=lwn.net |quote=Correct string handling means that you always know how long your strings are and therefore you can you memcpy (instead of strcpy).}}</ref><ref>{{man|3|strlcpy|ManKier}}  "However, one may question the validity of such optimizations, as they defeat the whole purpose of strlcpy() and strlcat(). As a matter of fact, the first version of this manual page got it wrong."</ref> नतीजतन, उन्हें [[जीएनयू सी लाइब्रेरी]] (लिनक्स पर सॉफ़्टवेयर द्वारा उपयोग किया जाता है। ) में शामिल नहीं किया गया है, हालांकि वे ओपनबीएसडी, फ्रीबीएसडी, [[नेटबीएसडी]], [[सोलारिस (ऑपरेटिंग सिस्टम)]], [[ओएस एक्स]] और [[क्यूएनएक्स]] के साथ-साथ सी पुस्तकालयों में भी लागू किए गए हैं।। लिनक्स के लिए वैकल्पिक सी पुस्तकालयों में, जैसे [https://en.wikibooks.org/wiki/C%20Programming/C%20Reference/nonstandard/strlcpy libbsd], 2008 में पेश किया गया,<ref>{{Cite web |url=https://libbsd.freedesktop.org/ |title=libbsd|access-date=2022-11-21}}</ref> और [[माँसपेशियाँ]], 2011 में पेश किया गया।<ref>{{cite web |url=https://git.musl-libc.org/cgit/musl/tree/src/string/strlcpy.c |title=root/src/string/strlcpy.c |access-date=2017-01-28 }}</ref><ref>{{cite web |url=https://git.musl-libc.org/cgit/musl/tree/src/string/strlcat.c |title=root/src/string/strlcat.c |access-date=2017-01-28 }}</ref> GNU C लाइब्रेरी समर्थन की कमी ने विभिन्न सॉफ़्टवेयर लेखकों को इसका उपयोग करने और अन्य Simple_DirectMedia_Layer, [[GLib]], [[FFmpeg]], [[rsync]], और यहाँ तक कि Linux कर्नेल में आंतरिक रूप से एक प्रतिस्थापन को बंडल करने से नहीं रोका है। इन कार्यों के लिए ओपन सोर्स कार्यान्वयन उपलब्ध हैं।।<ref>{{cite web|url=http://bxr.su/OpenBSD/lib/libc/string/strlcpy.c|title= strlcpy.c|author=Todd C. Miller |website=BSD Cross Reference}}</ref><ref>{{cite web|url=http://bxr.su/OpenBSD/lib/libc/string/strlcat.c|title= strlcat.c|author=Todd C. Miller |website=BSD Cross Reference}}</ref>
सबसे लोकप्रिय{{Efn|On GitHub, there are 7,813,206 uses of <code>strlcpy</code>, versus 38,644 uses of <code>strcpy_s</code> (and 15,286,150 uses of <code>strcpy</code>).{{Citation needed|date=February 2015}}}} प्रतिस्थापन <code>strlcat</code> और <code>strlcpy</code> फ़ंक्शंन हैं, जो दिसंबर 1998 में [[OpenBSD|मुक्त-बीएसडी]] 2.4 में दिखाई दिए थे। ये फ़ंक्शन सदैव गंतव्य बफर में एक एनयूएल लिखते हैं, यदि आवश्यक हो तो परिणाम को छोटा कर देते हैं, और आवश्यक बफर के आकार को वापस कर देते हैं, जो ट्रंकेशन का पता लगाने की स्वीकृति देते है और एक नया बफर बनाने के लिए एक आकार प्रदान करते है जो ट्रंकेट नहीं होते है। कथित रूप से अप्रभावी सी स्ट्रिंग (स्ट्रिंग के कुछ वैकल्पिक रूप के अतिरिक्त) के उपयोग को प्रोत्साहित करने,<ref name="libc-alpha-discussion-1">[http://sources.redhat.com/ml/libc-alpha/ libc-alpha mailing list], selected messages from 8 August 2000 thread: [https://www.sourceware.org/ml/libc-alpha/2000-08/msg00053.html 53], [https://www.sourceware.org/ml/libc-alpha/2000-08/msg00060.html 60], [https://www.sourceware.org/ml/libc-alpha/2000-08/msg00061.html 61]</ref><ref>[https://lwn.net/Articles/507319/ The ups and downs of strlcpy(); LWN.net]</ref> और अन्य संभावित त्रुटियों को छिपाने के आधार पर उनकी आलोचना की गई है।<ref>{{cite web |title=strlcpy() को glibc में जोड़ना|url=https://lwn.net/Articles/612244/ |website=lwn.net |quote=Correct string handling means that you always know how long your strings are and therefore you can you memcpy (instead of strcpy).}}</ref><ref>{{man|3|strlcpy|ManKier}}  "However, one may question the validity of such optimizations, as they defeat the whole purpose of strlcpy() and strlcat(). As a matter of fact, the first version of this manual page got it wrong."</ref> जिसके परिणाम स्वरूप उन्हें [[जीएनयू सी लाइब्रेरी]] (लिनक्स पर सॉफ्टवेयर द्वारा उपयोग किया जाता है) में सम्मिलित नहीं किया गया है। हालांकि उन्हें मुक्त-बीएसडी, फ्रीबीएसडी, नेटबीएसडी, सोलारिस, ओएस एक्स और क्यूएनएक्स के लिए सी लाइब्रेरी के साथ-साथ वैकल्पिक सी लाइब्रेरी में भी प्रयुक्त किया गया है। लिनक्स के लिए जैसे कि [[b:C Programming/C Reference/nonstandard/strlcpy|lएलआईबीबीएसडी]] को 2008 में प्रस्तुत किया गया था<ref>{{Cite web |url=https://libbsd.freedesktop.org/ |title=libbsd|access-date=2022-11-21}}</ref> और एमयूएसएल को 2011 में प्रस्तुत किया गया था।<ref>{{cite web |url=https://git.musl-libc.org/cgit/musl/tree/src/string/strlcpy.c |title=root/src/string/strlcpy.c |access-date=2017-01-28 }}</ref><ref>{{cite web |url=https://git.musl-libc.org/cgit/musl/tree/src/string/strlcat.c |title=root/src/string/strlcat.c |access-date=2017-01-28 }}</ref> जीएनयू सी लाइब्रेरी समर्थन की कमी ने विभिन्न सॉफ्टवेयर लेखकों को इसका उपयोग करने और अन्य एसडीएल, [[GLib|जीएलआईबी]], [[FFmpeg|एफएफएमपीईजी]], [[rsync|आरसिंक]] और यहां तक ​​​​कि आंतरिक रूप से लिनक्स कर्नेल में प्रतिस्थापन को एकत्र करने से नहीं रोका है। इन फंक्शन के लिए मुक्त-स्रोत कार्यान्वयन उपलब्ध हैं।<ref>{{cite web|url=http://bxr.su/OpenBSD/lib/libc/string/strlcpy.c|title= strlcpy.c|author=Todd C. Miller |website=BSD Cross Reference}}</ref><ref>{{cite web|url=http://bxr.su/OpenBSD/lib/libc/string/strlcat.c|title= strlcat.c|author=Todd C. Miller |website=BSD Cross Reference}}</ref>  
कभी-कभी <code>memcpy</code><ref name=memcpy-cppreference/>या <code>memmove</code><ref name=memmove-cppreference/>उपयोग किया जाता है, क्योंकि वे इससे अधिक कुशल हो सकते हैं। <code>strcpy</code> क्योंकि वे बार-बार एनयूएल की जांच नहीं करते हैं। (यह आधुनिक प्रोसेसर पर कम सच है। )। चूंकि उन्हें एक पैरामीटर के रूप में बफर लंबाई की आवश्यकता होती है, इस पैरामीटर की सही सेटिंग बफर ओवरफ्लो से बच सकती है।
 
अपने 2004 [[Microsoft सुरक्षा विकास जीवनचक्र]] के हिस्से के रूप में, Microsoft ने सुरक्षित कार्यों के एक परिवार की शुरुआत की, जिसमें शामिल हैं। <code>strcpy_s</code> और <code>strcat_s</code> (कई अन्य लोगों के साथ)।<ref>{{cite web|last1=Lovell|first1=Martyn|title=Repel Attacks on Your Code with the Visual Studio 2005 Safe C and C++ Libraries|url=https://msdn.microsoft.com/en-us/magazine/cc163794.aspx|access-date=13 February 2015}}</ref> ISO/IEC WDTR 24731 द्वारा प्रस्तावित वैकल्पिक C11 (C मानक संशोधन)|C11 (अनुलग्नक K) के भाग के रूप में इन कार्यों को कुछ मामूली परिवर्तनों के साथ मानकीकृत किया गया था। ये कार्य विभिन्न जाँचों को निष्पादित करते हैं जिसमें यह भी शामिल है। कि स्ट्रिंग बफर में फ़िट होने के लिए बहुत लंबी है। या नहीं। . यदि जांच विफल हो जाती है, तो उपयोगकर्ता द्वारा निर्दिष्ट रनटाइम-बाधा हैं।डलर फ़ंक्शन को कॉल किया जाता है,<ref>{{cite web |title=C11 मानक मसौदा|url=http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1548.pdf |access-date=13 February 2013 |location=§K.3.1.4p2}}</ref> जो आमतौर पर प्रोग्राम को बंद कर देता है। <ref>{{cite web |title=C11 मानक मसौदा|url=http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1548.pdf |access-date=13 February 2013 |location=§K.3.6.1.1p4}}</ref><ref>{{cite web|title=पैरामीटर सत्यापन|url=https://msdn.microsoft.com/en-us/library/ksazx244.aspx}}</ref> रनटाइम-बाधा हैं।डलर को कॉल करने से पहले कुछ फ़ंक्शन विनाशकारी संचालन करते हैं।; उदाहरण के लिए, <code>strcat_s</code> गंतव्य को खाली स्ट्रिंग पर सेट करता है,<ref>{{cite web |title=C11 मानक मसौदा|url=http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1548.pdf |access-date=13 February 2013 |location=§K.3.7.2.1p4}}</ref> जो त्रुटि स्थितियों से पुनर्प्राप्त करना या उन्हें डीबग करना कठिन बना सकता है। इन कार्यों ने काफी आलोचना को आकर्षित किया क्योंकि शुरू में उन्हें केवल विंडोज पर लागू किया गया था और उसी समय [[माइक्रोसॉफ्ट विजुअल सी ++]] ++ द्वारा चेतावनी संदेश उत्पन्न करना शुरू कर दिया गया था, जो प्रोग्रामर को मानक कार्यों के बजाय इन कार्यों का उपयोग करने का सुझाव दे रहे थे। कुछ लोगों द्वारा यह अनुमान लगाया गया है। कि माइक्रोसॉफ्ट द्वारा डेवलपर्स को अपने प्लेटफॉर्म में लॉक करने का प्रयास किया जा रहा है। <ref>{{cite web |url=http://www.informit.com/blogs/blog.aspx?uk=Theyre-at-it-again |title=वे इसे फिर से कर रहे हैं|author=Danny Kalev |publisher=InformIT |access-date=10 November 2011 |archive-url=https://web.archive.org/web/20120115011928/http://www.informit.com/blogs/blog.aspx?uk=Theyre-at-it-again |archive-date=15 January 2012 |url-status=dead }}</ref> हालांकि इन कार्यों के ओपन-सोर्स कार्यान्वयन उपलब्ध हैं ये कार्य सामान्य यूनिक्स सी पुस्तकालयों में मौजूद नहीं हैं।।<ref>{{cite web |url=http://safeclib.sourceforge.net/ |title=The Safe C Library provides bound checking memory and string functions per ISO/IEC TR24731 |author=Safe C Library |publisher=Sourceforge | access-date=6 March 2013 }}</ref> इन कार्यों के अनुभव ने उनके अपनाने और उपयोग में त्रुटियों के साथ महत्वपूर्ण समस्याएं दिखाई हैं इसलिए सी मानक के अगले संशोधन के लिए अनुलग्नक के को हटाने का प्रस्ताव है। <ref>{{cite web |title=Field Experience With Annex K — Bounds Checking Interfaces |url=http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1967.htm |access-date=5 November 2015}}</ref> का उपयोग {{code|memset_s}} को अवांछित संकलक अनुकूलन से बचने के तरीके के रूप में भी सुझाया गया है। <ref>{{cite web |title=MSC06-C. Beware of compiler optimizations |url=https://wiki.sei.cmu.edu/confluence/display/c/MSC06-C.+Beware+of+compiler+optimizations |website=SEI CERT C Coding Standard}}</ref><ref>{{man|3|memset_s|FreeBSD}}</ref>


कभी-कभी <code>memcpy</code><ref name="memcpy-cppreference" />या <code>memmove</code><ref name="memmove-cppreference" /> का उपयोग किया जाता है, क्योंकि वे <code>strcpy</code> की तुलना में अधिक कुशल हो सकते हैं क्योंकि वे बार-बार NUL की जांच नहीं करते हैं आधुनिक प्रसंस्करण पर यह कम सच है। चूँकि उन्हें एक पैरामीटर के रूप में बफर लंबाई की आवश्यकता होती है, इस पैरामीटर की सही समूहिंग बफर ओवरफ्लो से बच सकती है।


2004 [[Microsoft सुरक्षा विकास जीवनचक्र|माइक्रोसॉफ्ट सुरक्षा विकास]] के रूप में माइक्रोसॉफ्ट ने<code>strcpy_s</code> और <code>strcat_s</code> (कई अन्य के साथ) सहित "सुरक्षित" फंक्शन का एक समूह प्रस्तुत किया था।<ref>{{cite web|last1=Lovell|first1=Martyn|title=Repel Attacks on Your Code with the Visual Studio 2005 Safe C and C++ Libraries|url=https://msdn.microsoft.com/en-us/magazine/cc163794.aspx|access-date=13 February 2015}}</ref> इन फंक्शन को आईएसओ/आईईसी डब्ल्यूडीटीआर-24731 द्वारा प्रस्तावित वैकल्पिक सी-11 (अनुलग्नक K) के रूप में कुछ सुख्म परिवर्तनों के साथ मानकीकृत किया गया था। ये फ़ंक्शन विभिन्न जांच करते हैं, जिसमें यह भी सम्मिलित है कि स्ट्रिंग बफर में प्रयुक्त होने के लिए बहुत लंबी है या नहीं लंबी है यदि जांच विफल हो जाती है, तो उपयोगकर्ता द्वारा निर्दिष्ट "रनटाइम-बाधा हैंडलर" फ़ंक्शन को कॉल किया जाता है,<ref>{{cite web |title=C11 मानक मसौदा|url=http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1548.pdf |access-date=13 February 2013 |location=§K.3.1.4p2}}</ref> जो सामान्यतः प्रोग्राम को बंद कर देता है। <ref>{{cite web |title=C11 मानक मसौदा|url=http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1548.pdf |access-date=13 February 2013 |location=§K.3.6.1.1p4}}</ref><ref>{{cite web|title=पैरामीटर सत्यापन|url=https://msdn.microsoft.com/en-us/library/ksazx244.aspx}}</ref> कुछ फ़ंक्शन रनटाइम-बाधा हैंडलर को कॉल करने से पहले विनाशकारी संचालन करते हैं। उदाहरण के लिए <code>strcat_s</code> गंतव्य को रिक्त स्ट्रिंग पर समूह करता है,<ref>{{cite web |title=C11 मानक मसौदा|url=http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1548.pdf |access-date=13 February 2013 |location=§K.3.7.2.1p4}}</ref> जिससे त्रुटि स्थितियों से पुनर्प्राप्त करना या उन्हें डीबग करना जटिल हो सकता है। इन फ़ंक्शंनों ने आलोचना को आकर्षित किया क्योंकि प्रारम्भ में इन्हें केवल विंडोज़ पर प्रयुक्त किया गया था और साथ ही [[माइक्रोसॉफ्ट विजुअल सी ++|माइक्रोसॉफ्ट विजुअल सी++]] द्वारा चेतावनी संदेश भी तैयार किए जाने लगे, जिसमें प्रोग्रामर को मानक फ़ंक्शंन के अतिरिक्त इन फ़ंक्शंन का उपयोग करने का सुझाव दिया गया है। कुछ लोगों का अनुमान है कि यह माइक्रोसॉफ्ट द्वारा विकासक को अपने प्लेटफॉर्म में लॉक करने का एक प्रयास है।<ref>{{cite web |url=http://safeclib.sourceforge.net/ |title=The Safe C Library provides bound checking memory and string functions per ISO/IEC TR24731 |author=Safe C Library |publisher=Sourceforge | access-date=6 March 2013 }}</ref> हालाँकि इन फ़ंक्शंन का मुक्त-स्रोत कार्यान्वयन उपलब्ध है, ये फ़ंक्शंन सामान्य यूनिक्स सी लाइब्रेरी में सम्मिलित नहीं हैं।<ref>{{cite web |url=http://www.informit.com/blogs/blog.aspx?uk=Theyre-at-it-again |title=वे इसे फिर से कर रहे हैं|author=Danny Kalev |publisher=InformIT |access-date=10 November 2011 |archive-url=https://web.archive.org/web/20120115011928/http://www.informit.com/blogs/blog.aspx?uk=Theyre-at-it-again |archive-date=15 January 2012 |url-status=dead }}</ref> इन फंक्शन के साथ अनुभव ने उन्हें अपनाने और उपयोग में त्रुटियों के साथ महत्वपूर्ण समस्याएं दिखाई हैं, इसलिए सी मानक के अगले संशोधन के लिए {{code|atoxx}} K को हटाने का प्रस्ताव है।<ref>{{cite web |title=Field Experience With Annex K — Bounds Checking Interfaces |url=http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1967.htm |access-date=5 November 2015}}</ref> अवांछित कंपाइलर अनुकूलन से बचने के एक प्रकार के रूप में {{code|memset_s}} के उपयोग का सुझाव भी दिया गया है।<ref>{{cite web |title=MSC06-C. Beware of compiler optimizations |url=https://wiki.sei.cmu.edu/confluence/display/c/MSC06-C.+Beware+of+compiler+optimizations |website=SEI CERT C Coding Standard}}</ref><ref>{{man|3|memset_s|FreeBSD}}</ref>
== यह भी देखें ==
== यह भी देखें ==
* {{Section link|C syntax|Strings}}{{snd}} बैकस्लैश एस्केप सीक्वेंस सहित स्रोत कोड सिंटैक्स
* {{Section link|सी  |स्ट्रिंग्स}}{{snd}} बैकस्लैश एस्केप अनुक्रम सहित स्रोत कोड
* [[स्ट्रिंग कार्य करता है|स्ट्रिंग कार्य करता है।]]  
* [[स्ट्रिंग कार्य करता है|स्ट्रिंग फ़ंक्शन]]
* [[ पर्ल संगत नियमित अभिव्यक्तियाँ | पर्ल संगत नियमित अभिव्यक्तियाँ]] (पीसीआरई)
* [[ पर्ल संगत नियमित अभिव्यक्तियाँ |पर्ल संगत नियमित अभिव्यक्ति]] (पीसीआरई)


==टिप्पणियाँ==
==टिप्पणियाँ==
{{Notelist}}
{{Notelist}}
==संदर्भ==
==संदर्भ==
{{Reflist|30em}}
{{Reflist|30em}}
Line 332: Line 337:


{{CProLang|state=expanded}}
{{CProLang|state=expanded}}
[[Category: सी (प्रोग्रामिंग भाषा) | स्ट्रिंग हैंडलिंग]] [[Category: सी मानक पुस्तकालय | स्ट्रिंग हैंडलिंग]] [[Category: स्ट्रिंग (कंप्यूटर विज्ञान)]]


[[Category: Machine Translated Page]]
[[Category:All articles with unsourced statements]]
[[Category:Articles with hatnote templates targeting a nonexistent page]]
[[Category:Articles with invalid date parameter in template]]
[[Category:Articles with unsourced statements from February 2015]]
[[Category:CS1 English-language sources (en)]]
[[Category:CS1 maint]]
[[Category:Collapse templates]]
[[Category:Created On 14/06/2023]]
[[Category:Created On 14/06/2023]]
[[Category:Lua-based templates]]
[[Category:Machine Translated Page]]
[[Category:Missing redirects]]
[[Category:Navigational boxes| ]]
[[Category:Navigational boxes without horizontal lists]]
[[Category:Pages with script errors]]
[[Category:Sidebars with styles needing conversion]]
[[Category:Template documentation pages|Documentation/doc]]
[[Category:Templates Vigyan Ready]]
[[Category:Templates generating microformats]]
[[Category:Templates that add a tracking category]]
[[Category:Templates that are not mobile friendly]]
[[Category:Templates that generate short descriptions]]
[[Category:Templates using TemplateData]]
[[Category:Use dmy dates from July 2020]]
[[Category:Wikipedia metatemplates]]

Latest revision as of 19:33, 30 June 2023

सी प्रोग्रामिंग भाषा की मानक लाइब्रेरी में सी स्ट्रिंग हैंडलिंग (लिपि स्ट्रिंग और बाइट स्ट्रिंग) संचालन को प्रयुक्त करने वाले फंक्शन का एक समूह है। प्रतिलिपि बनाना, संयोजन, टोकनीकरण और खोज जैसे विभिन्न संचालन समर्थित हैं। लिपि स्ट्रिंग के लिए, मानक लाइब्रेरी इस विधि का उपयोग करती है जिससे स्ट्रिंग को रिक्त किया जाता है। n अक्षरों की एक स्ट्रिंग को n + 1 तत्वों की एक सरणी (डेटा संरचना) के रूप में दर्शाया जाता है, जिनमें से अंतिम स्ट्रिंग NUL होती है।

प्रोग्रामिंग भाषा में स्ट्रिंग के लिए एकमात्र समर्थन यह है कि कंपाइलर स्ट्रिंग स्थिरांक को शून्य-समाप्त स्ट्रिंग में अनुवादित करता है।

परिभाषाएँ

एक स्ट्रिंग को पहली शून्य कोड इकाई (जिसे प्रायः एनयूएल कोड इकाई कहा जाता है।) द्वारा समाप्त की गई कोड इकाइयों के एक सन्निहित अनुक्रम के रूप में परिभाषित किया गया है।[1] इसका अर्थ यह है कि एक स्ट्रिंग में शून्य कोड इकाई नहीं हो सकती है क्योंकि पहली बार देखी गई इकाई स्ट्रिंग के अंत को चिह्नित करती है। एक स्ट्रिंग की लंबाई शून्य कोड इकाई से पहले कोड इकाइयों की संख्या है। [1] एक स्ट्रिंग द्वारा अधिकृत की गई मेमोरी सदैव लंबाई से अधिक कोड इकाई होती है क्योंकि शून्य समापक कोड को संग्रहीत करने के लिए भंडारण की आवश्यकता होती है।

सामान्यतः स्ट्रिंग शब्द का अर्थ एक स्ट्रिंग है। जहां कोड इकाई char प्रकार की होती है, जो सभी आधुनिक मशीनों पर प्रायः 8 बिट होती है। सी-90 (सी संस्करण) विस्तृत स्ट्रिंग को परिभाषित करता है। [1] जो wchar_t प्रकार की एक कोड इकाई का उपयोग करता है, जो आधुनिक मशीनों पर 16 या 32 बिट है। यह यूनिकोड के लिए था लेकिन इसके अतिरिक्त यूनिकोड के लिए सामान्य स्ट्रिंग में यूटीएफ-8 का उपयोग करना सामान्य होता जा रहा है।

पहली कोड इकाई में एक पॉइंटर पास करके स्ट्रिंग को फ़ंक्शंन में पास किया जाता है। चूँकि char* और wchar_t* अलग-अलग प्रकार के हैं व्यापक स्ट्रिंग का प्रसंस्करण करने वाले फ़ंक्शन सामान्य स्ट्रिंग के प्रसंस्करण करने वाले फ़ंक्शंन से भिन्न होते हैं। और प्रायः उनके अलग-अलग नाम होते हैं।

संकलन के समय स्ट्रिंग अक्षर (सी स्रोत कोड में "text") को सरणियों में परिवर्तित कर दिया जाता है।[2] परिणाम कोड इकाइयों की एक सरणी है। जिसमें सभी अक्षर और एक पिछली शून्य कोड इकाई मे सम्मिलित होते है। सी-90 में L"text" एक विस्तृत स्ट्रिंग उत्पन्न करता है। एक स्ट्रिंग में शून्य कोड इकाई हो सकती है। जिसमे स्रोत कोड \0 प्रयुक्त किया जाता है लेकिन इससे स्ट्रिंग उस बिंदु पर समाप्त हो जाती है। शेष कोड को मेमोरी में रखा जाता है और अंत में एक और शून्य कोड इकाई को जोड़कर यह जानना असंभव है कि उन कोड इकाइयों को स्ट्रिंग शाब्दिक से अनुवादित किया गया था। इसलिए ऐसा स्रोत कोड एक स्ट्रिंग शाब्दिक नहीं होता है। [3]

लिपि एनकोडिंग

प्रत्येक स्ट्रिंग उपयुक्त प्रकार (char या wchar_t) की शून्य कोड इकाई की पहली घटना पर समाप्त होती है। जिसके परिणामस्वरूप एक बाइट स्ट्रिंग (char*) में एएससीआईआई या किसी एएससीआईआई एक्सटेंशन में गैर-शून्य अक्षर हो सकते हैं लेकिन यूटीएफ-16 जैसे एन्कोडिंग में वर्ण नहीं हो सकते हैं। यद्यपि 16-बिट कोड इकाई गैर-शून्य हो, इसकी उच्च या निम्न बाइट शून्य हो सकता है। जिन एन्कोडिंग को विस्तृत स्ट्रिंग में संग्रहीत किया जा सकता है, उन्हें wchar_t की चौड़ाई द्वारा परिभाषित किया गया है। अधिकांश कार्यान्वयन में wchar_t कम से कम 16 बिट होते है। इसलिए सभी 16-बिट एन्कोडिंग, जैसे यूसीएस -2 को संग्रहीत किया जा सकता है यदि wchar_t 32-बिट है, तो 32-बिट एन्कोडिंग जैसे यूटीएफ-32 को संग्रहीत किया जा सकता है। मानक के लिए एक "प्रकार की आवश्यकता होती है जो किसी भी व्यापक चरित्र को धारण करता हो जो यूसीएस-2 से यूटीएफ-16 में परिवर्तन के बाद से विंडोज़ पर अब सच नहीं है। इसे मानक में एक दोष के रूप में पहचाना गया है और C++ में ठीक किया गया है।[4] C++11 और C-11 स्पष्ट चौड़ाई char16_t और char32_t के साथ दो प्रकार संबद्ध हैं।[5]

परिवर्तनीय-चौड़ाई एन्कोडिंग का उपयोग बाइट स्ट्रिंग और वाइड स्ट्रिंग दोनों में किया जा सकता है। स्ट्रिंग की लंबाई और समूह को बाइट्स या wchar_t में मापा जाता है, न कि "अक्षरों" में, जो प्रारम्भिक प्रोग्रामर के लिए भ्रमित करने वाला हो सकता है। यूटीएफ-8 और शिफ्ट जेआईएस का उपयोग प्रायः C बाइट स्ट्रिंग में किया जाता है, जबकि यूटीएफ-16 का उपयोग प्रायः C वाइड स्ट्रिंग में किया जाता है। जब wchar_t 16 बिट होता है। strncpy जैसे फ़ंक्शंन का उपयोग करके चर-चौड़ाई वाले वर्णों के साथ स्ट्रिंग को छोटा करना स्ट्रिंग के अंत में अमान्य अनुक्रम उत्पन्न कर सकता है। यह असुरक्षित हो सकता है। यदि विभाजित किए गए भागों की व्याख्या उस कोड द्वारा की जाती है जो मानता है कि इनपुट वैध है।

यूनिकोड शाब्दिक के लिए समर्थन जैसे char foo[512] = "φωωβαρ"; (यूटीएफ-8) या wchar_t foo[512] = L"φωωβαρ"; यूटीएफ-16 या यूटीएफ-32, wchar_t पर निर्भर करता है। कार्यान्वयन परिभाषित है और इसके लिए आवश्यक हो सकता है कि स्रोत कोड एक ही एन्कोडिंग में हो, विशेष रूप से char के लिए जहां कंपाइलर उद्धरणों के बीच जो कुछ भी है उसका अनुकरण कर सकते हैं। कुछ कंपाइलरों या संपादकों को यूटीएफ-8 के प्रत्येक बाइट के लिए सभी गैर-एएससीआईआई वर्णों को\xNN अनुक्रमों के रूप में या यूटीएफ-16 के प्रत्येक शब्द के लिए \uNNNN प्रस्तुत करने की आवश्यकता होती है। C11 (और C++11) के बाद से, एक नया char foo[512] = u8"φωωβαρ"; शाब्दिक वाक्य-विन्यास उपलब्ध है जो बाइटस्ट्रिंग शाब्दिक के लिए यूटीएफ-8 का दायित्व देता है।[6] सी++20 और सी-23 के बाद से एक char8_t प्रकार जोड़ा गया था जो यूटीएफ-8 वर्णों को संग्रहीत करने के लिए है, यू-8 उपसर्ग वर्ण और स्ट्रिंग अक्षर के प्रकारों को क्रमशः char8_t और char8_t[] में परिवर्तित कर दिया गया था।

फंक्शन का अवलोकन

सी स्ट्रिंग पर चलने वाले अधिकांश फ़ंक्शन string.h हेडर (C++ में cstring) में घोषित किए जाते हैं जबकि C वाइड स्ट्रिंग पर चलने वाले फ़ंक्शन wchar.h हेडर (C++ में cwchar) में घोषित किए जाते हैं। इन हेडर में मेमोरी बफ़र्स को संभालने के लिए उपयोग किए जाने वाले फ़ंक्शन की घोषणाएं भी सम्मिलित हैं। इस प्रकार यह नाम एक गलत नाम है।

string.h में घोषित फ़ंक्शंन अपेक्षाकृत लोकप्रिय हैं क्योंकि सी मानक लाइब्रेरी के एक भाग के रूप में उन्हें C का समर्थन करने वाले किसी भी प्लेटफ़ॉर्म पर कार्य करने का दायित्व दिया जाता है। हालाँकि, इन फ़ंक्शंन के साथ कुछ सुरक्षा समस्याएं सम्मिलित हैं जैसे कि उपयोग न किए जाने पर संभावित बफर ओवरफ़्लो सावधानीपूर्वक और उपयुक्त तरीके से जिससे प्रोग्रामर सुरक्षित और संभवतः कम पोर्टेबल उपकरण पसंद करते हैं जिनमें से कुछ लोकप्रिय नीचे सूचीबद्ध हैं। इनमें से कुछ फ़ंक्शन एक const स्ट्रिंग पॉइंटर को स्वीकृत करके और स्ट्रिंग के भीतर एक गैर-स्थिर पॉइंटर को वापस करके स्थिर-शुद्धता का उल्लंघन भी करते हैं। इसे ठीक करने के लिए कुछ को मानक लाइब्रेरी के सी++ संस्करण में दो अतिभारित फ़ंक्शंन में विभाजित किया गया है।

ऐतिहासिक दस्तावेज़ीकरण में सी स्ट्रिंग के लिए "बाइट" के स्थान पर प्रायः "लिपि" शब्द का उपयोग किया जाता था। जिससे कई लोगों को यह विश्वास हो जाता है कि ये फ़ंक्शन किसी प्रकार यूटीएफ-8 के लिए कार्य नहीं करते हैं। वास्तव में सभी लंबाई को बाइट्स के रूप में परिभाषित किया गया है और यह सभी कार्यान्वयनों में सच है ये फ़ंक्शन यूटीएफ -8 के साथ-साथ एकल बाइट एन्कोडिंग के साथ भी कार्य करते हैं। इसे स्पष्ट करने के लिए बीएसडी दस्तावेज़ को ठीक कर दिया गया है, लेकिन पॉज़िक्स, लिनक्स और विंडोज़ दस्तावेज़ अभी भी कई स्थानों पर char का उपयोग करते हैं। जहां "बाइट" या wchar_t सही शब्द है।

मेमोरी बफ़र्स को संभालने के लिए फ़ंक्शन बाइट्स के अनुक्रम को संसाधित कर सकते हैं, जिसमें डेटा के भाग के रूप में शून्य-बाइट सम्मिलित है। इन फ़ंक्शंन के नाम सामान्यतः str उपसर्ग के विपरीत mem से प्रारम्भ होते हैं।

स्थिरांक और प्रकार

नाम टिप्पणी
NULL मैक्रो का विस्तार शून्य सूचक स्थिरांक तक होता है, जो कि एक सूचक मान का प्रतिनिधित्व करने वाला स्थिरांक है। जो मेमोरी में किसी ऑब्जेक्ट का सही एड्रेस नहीं होने का दायित्व करता है।
wchar_t "विस्तृत" स्ट्रिंग में एक कोड इकाई के लिए उपयोग किया जाने वाला प्रकार विंडोज़ पर, wchar_t का बड़े पैमाने पर उपयोग करने वाला एकमात्र प्लेटफ़ॉर्म है। इसे 16-बिट के रूप में परिभाषित किया गया है जो किसी भी यूनिकोड (यूसीएस-2) वर्ण का प्रतिनिधित्व करने के लिए पर्याप्त था, लेकिन अब केवल यूटीएफ-16 कोड इकाई का प्रतिनिधित्व करने के लिए पर्याप्त है, जो आधा हो सकता है। कोड बिंदु को अन्य प्लेटफ़ॉर्म पर इसे 32-बिट के रूप में परिभाषित किया गया है। और एक यूनिकोड कोड बिंदु सदैव प्रयुक्त किया जाता है। [7] सी मानक के लिए केवल यह आवश्यक है। कि wchar_t समर्थित सिस्टम एड्रेस के बीच सबसे व्यापक वर्ण समूह को धारण करने के लिए पर्याप्त चौड़ा हो और आकार में char से बड़ा या बराबर हो,[8]
wint_t पूर्णांक प्रकार जो wchar_t के किसी भी मान के साथ-साथ मैक्रो डब्ल्यूईओएफ के मान को भी धारण कर सकता है। सामान्यतः 32 बिट हस्ताक्षरित मान अभिन्न पदोन्नति द्वारा यह प्रकार अपरिवर्तित होता है।
mbstate_t इसमें एक कॉल से दूसरे फ़ंक्शन तक आवश्यक रूपांतरण स्थिति के विषय में सभी जानकारी सम्मिलित होती है।

फंक्शन

बाइट

स्ट्रिंग

वाइड
स्ट्रिंग
विवरणFor wide string functions substitute wchar_t for "byte" in the description</ref>
स्ट्रिंग
प्रकलन (कंप्यूटर)
strcpy[9] wcscpy[10] एक स्ट्रिंग को दूसरे में रूपांतरित करता है।
strncpy[11] wcsncpy[12] स्रोत से रूपांतरित करके या शून्य जोड़कर n बाइट्स लिखता है।
strcat[13] wcscat[14] एक स्ट्रिंग को दूसरे से जोड़ता है।
strncat[15] wcsncat[16] एक स्ट्रिंग से दूसरे स्ट्रिंग में n बाइट्स से अधिक नहीं जोड़ता है।
strxfrm[17] wcsxfrm[18] वर्तमान स्थान के अनुसार एक स्ट्रिंग को रूपांतरित करता है।
स्ट्रिंग परीक्षण strlen[19] wcslen[20] स्ट्रिंग की लंबाई वापस करता है।
strcmp[21] wcscmp[22] दो तारों की तीन-तरफा की तुलना करता है।
strncmp[23] wcsncmp[24] दो स्ट्रिंग में बाइट्स की एक विशिष्ट संख्या की तुलना करता है।
strcoll[25] wcscoll[26] वर्तमान स्थान के अनुसार दो स्ट्रिंग की तुलना करता है।
strchr[27] wcschr[28] स्ट्रिंग में बाइट की पहली घटना खोजता है।
strrchr[29] wcsrchr[30] स्ट्रिंग में बाइट की अंतिम घटना खोजता है।
strspn[31] wcsspn[32] स्ट्रिंग में प्रारंभिक बाइट्स की संख्या वापस करता है जो दूसरी स्ट्रिंग में हैं।
strcspn[33] wcscspn[34] स्ट्रिंग में प्रारंभिक बाइट्स की संख्या वापस करता है जो दूसरी स्ट्रिंग में नहीं हैं।
strpbrk[35] wcspbrk[36] स्ट्रिंग में एक समूह में बाइट की पहली घटना को खोजता है।
strstr[37] wcsstr[38] स्ट्रिंग में एक उपस्ट्रिंग की पहली घटना को खोजता है।
strtok[39] wcstok[40] स्ट्रिंग को टोकन में विभाजित करता है।
विविध strerror[41] त्रुटि कोड से प्राप्त संदेश वाली एक स्ट्रिंग वापस करता है।
मेमोरी प्रकलन (कंप्यूटर) memset[42] wmemset[43] बफ़र को बार-बार बाइट से भरता है।
memcpy[44] wmemcpy[45] एक बफ़र को दूसरे बफ़र में परिवर्तित करता है।
memmove[46] wmemmove[47] एक बफ़र को दूसरे संभवतः ओवरलैपिंग बफ़र में परिवर्तित करता है।
memcmp[48] wmemcmp[49] दो बफ़र्स की तीन-तरफ़ा तुलना करता है।
memchr[50] wmemchr[51] बफ़र में बाइट की पहली घटना को खोजता है।

बहु-बाइट फंक्शन

नाम विवरण
mblen[52] अगले बहु-बाइट लिपि में बाइट्स की संख्या वापस करता है।
mbtowc[53] अगले बहु-बाइट लिपि को विस्तृत लिपि में परिवर्तित करता है।
wctomb[54] एक विस्तृत चरित्र को उसके बहु-बाइट प्रतिनिधित्व में परिवर्तित करता है।
mbstowcs[55] बहु-बाइट स्ट्रिंग को एक विस्तृत स्ट्रिंग में परिवर्तित करता है।
wcstombs[56] एक विस्तृत स्ट्रिंग को बहु-बाइट स्ट्रिंग में परिवर्तित करता है।
btowc[57] यदि संभव हो तो एकल-बाइट वर्ण को विस्तृत वर्ण में परिवर्तित करता है।
wctob[58] यदि संभव हो तो विस्तृत वर्ण को एकल-बाइट वर्ण में परिवर्तित करता है।
mbsinit[59] जाँचता है कि क्या कोई स्थित वस्तु प्रारंभिक स्थिति का प्रतिनिधित्व करती है।
mbrlen[60] दी गई स्थिति में अगले बहु-बाइट लिपि में बाइट्स की संख्या वापस करता है।
mbrtowc[61] दी गई स्थिति में अगले बहु-बाइट लिपि को विस्तृत लिपि में परिवर्तित करता है।
wcrtomb[62] दी गई स्थिति में एक विस्तृत char को उसके बहु-बाइट प्रतिनिधित्व में परिवर्तित करता है।
mbsrtowcs[63] किसी बहु-बाइट स्ट्रिंग को दी गई स्थिति में एक विस्तृत स्ट्रिंग में परिवर्तित करता है।
wcsrtombs[64] दी गई स्थिति में एक विस्तृत स्ट्रिंग को बहु-बाइट स्ट्रिंग में परिवर्तित करता है।

ये सभी फ़ंक्शन एक पॉइंटर को mbstate_t वस्तु पर ले जाते हैं जिससे कॉल करने वाले फ़ंक्शन को बनाए रखना होगा। इसका उद्देश्य मूल रूप से एमबी एनकोडिंग में परिवर्तन की स्थिति को नियंत्रित करना था, लेकिन यूटीएफ-8 जैसे आधुनिक एनकोडिंग को इसकी आवश्यकता नहीं है। हालाँकि इन फ़ंक्शन को इस धारणा पर डिज़ाइन किया गया था कि wc एन्कोडिंग एक चर-चौड़ाई एन्कोडिंग नहीं है और इस प्रकार एक समय में बिल्कुल एक wchar_t का सामना करने के लिए डिज़ाइन किया गया है। इसे स्ट्रिंग पॉइंटर का उपयोग करने के अतिरिक्त मान से पास किया जाता है चूँकि यूटीएफ-16 एक चर-चौड़ाई एन्कोडिंग है, mbstate_t को व्यापक एन्कोडिंग में सरोगेट जोड़े का नियंत्रण रखने के लिए पुन: उपयोग किया गया है, हालांकि कॉल करने वाले फ़ंक्शन को अभी भी एक ही वर्ण के लिएmbtowc का दो बार पता लगाना और कॉल करना होता है।[65][66][67]

संख्यात्मक रूपांतरण

बाइट

स्ट्रिंग

वाइड
स्ट्रिंग
विवरण
atof[68] एक स्ट्रिंग को फ़्लोटिंग-पॉइंट मान में परिवर्तित करता है जहाँ 'atof' का अर्थ एएससीआईआई फ़्लोट' है।
atoi
atol
atoll[69]
एक स्ट्रिंग को पूर्णांक (सी-99) में परिवर्तित करता है, जहाँ 'atof' का अर्थ एएससीआईआई पूर्णांक है।
strtof (C99)[70]
strtod[71]
strtold (C99)[72]
wcstof (C99)[73]
wcstod[74]
wcstold (C99)[75]
यह स्ट्रिंग को फ़्लोटिंग-पॉइंट मान में परिवर्तित करता है।
strtol
strtoll[76]
wcstol
wcstoll[77]
यह स्ट्रिंग को एक हस्ताक्षरित पूर्णांक में परिवर्तित करता है।
strtoul
strtoull[78]
wcstoul
wcstoull[79]
यह स्ट्रिंग को अहस्ताक्षरित पूर्णांक में परिवर्तित करता है।

सी मानक लाइब्रेरी में संख्यात्मक रूपांतरण के लिए कई फ़ंक्शन सम्मिलित हैं बाइट स्ट्रिंग का सामना करने वाले फ़ंक्शन stdlib.h हेडर (C++ में cstdlib हेडर) में परिभाषित किए गए हैं। विस्तृत स्ट्रिंग का सामना करने वाले फ़ंक्शन को wchar.h हेडर (C++ में cwcharr हेडर) में परिभाषित किया गया है।

फ़ंक्शन strchr, bsearch, strpbrk, strrchr, strstr, memchr और उनके विस्तृत समकक्ष स्थिरांक-शुद्धता नहीं हैं, क्योंकि वे एक const स्ट्रिंग पॉइंटर को स्वीकृत करते हैं और स्ट्रिंग के भीतर एक गैर-const पॉइंटर को वापस करते हैं। इसे सी-23 में ठीक कर दिया गया है।[80]

इसके अतिरिक्त मानक संशोधन 1 (सी-95) के बाद से atoxx फ़ंक्शंस को strtoxxx फ़ंक्शंस द्वारा सम्मिलित माना जाता है, जिस कारण से न तो सी-95 और न ही कोई बाद का मानक इन फ़ंक्शंस के विस्तृत-चरित्र संस्करण प्रदान करता है atoxx के विरुद्ध तर्क यह है कि वे त्रुटि और 0 के बीच अंतर नहीं करते हैं।[81]







लोकप्रिय विस्तारण

नाम प्लेटफॉर्म विवरण
bzero[82][83] पॉज़िक्स, बीएसडी एक बफ़र को शून्य बाइट्स से भरता है, जिसे मेम समूह द्वारा बहिष्कृत किया गया है।
memccpy[84] एसवीआईडी, पॉज़िक्स सी-23 के बाद से C मानक का भाग दो गैर-अतिव्यापी मेमोरी क्षेत्रों के बीच की प्रतियां एक दिये गए बाइट के प्राप्त होने पर स्थित हो जाती है।
mempcpy[85] जीएनयू अंतिम लिखित बाइट के बाद बाइट पर एक पॉइंटर वापस करने वाली memcpy का एक प्रकार
strcasecmp[86] पॉज़िक्स, बीएसडी strcmp का असंवेदनशील संस्करण
strcat_s[87] विंडोज़ strcat का एक प्रकार जो अनुकरण करने से पहले गंतव्य बफ़र आकार की जाँच करता है।
strcpy_s[88] विंडोज़ strcpy का एक प्रकार जो अनुकरण करने से पहले गंतव्य बफ़र आकार की जाँच करता है।
strdup[89] पॉज़िक्स सी-23 के बाद से सी मानक का भाग एक स्ट्रिंग को आवंटित और प्रतिलिपित करता है।
strerror_r[90] पॉज़िक्स 1, जीएनयू strerror का एक प्रकार जो थ्रेड-सुरक्षित है जीएनयू संस्करण पॉज़िक्स के साथ असंगत है।
stricmp[91] विंडोज़ strcmp का असंवेदनशील संस्करण
strlcpy[92] बीएसडी, सोलारिस strcpy का एक प्रकार जो गंतव्य बफ़र में प्रयुक्त होने के लिए परिणाम को छोटा कर देता है।[93]
strlcat[92] बीएसडी, सोलारिस strcat का एक प्रकार जो गंतव्य बफ़र में प्रयुक्त होने के लिए परिणाम को छोटा कर देता है।[93]
strsignal[94] पॉज़िक्स:2008 संकेत कोड का स्ट्रिंग प्रतिनिधित्व वापस करता है कि थ्रेड सुरक्षित नहीं है।
strtok_r[95] पॉज़िक्स strtok का एक प्रकार जो थ्रेड-सुरक्षित है।
char8_t[96] विंडोज़ सी-23 के बाद से सी मानक का भाग <uchar.h> में एक प्रकार जो यूटीएफ-8 वर्णों को संग्रहीत करने के लिए उपयुक्त है।
char16_t[97] C99 सी-11 के बाद से सी मानक का भाग <uchar.h> एक प्रकार जो 16 बिट्स रखने में सक्षम है, यद्यपि wchar_t एक और आकार हो।
char32_t[97] C99 सी-11 के बाद से सी मानक का भाग <uchar.h> एक प्रकार जो 32 बिट्स रखने में सक्षम है, यद्यपि wchar_t एक और आकार हो।

प्रतिस्थापन

बफर ओवरफ्लो की स्वीकृति न देने वाले फ़ंक्शंस के साथ strcat[13]और strcpy[9] को प्रस्थापित करने की अच्छी तरह से स्थापित आवश्यकता के अतिरिक्त कोई स्वीकृत मानक उत्पन्न नहीं हुआ है। यह आंशिक रूप से कई सी प्रोग्रामर की गलत धारणा के कारण है कि strncat और strncpy में वांछित व्यवहार है। हालाँकि, इसके लिए कोई भी फ़ंक्शन डिज़ाइन नहीं किया गया था उनका उद्देश्य शून्य-पैडेड निश्चित-आकार स्ट्रिंग बफ़र्स में परिवर्तन करना था। एक डेटा प्रारूप जो आधुनिक सॉफ़्टवेयर में सामान्यतः कम उपयोग किया जाता है व्यवहार और तर्क गैर-सहज ज्ञान युक्त हैं और प्रायः विशेषज्ञ प्रोग्रामर द्वारा भी गलत तरीके से लिखे गए हैं।[93]

सबसे लोकप्रिय[lower-alpha 1] प्रतिस्थापन strlcat और strlcpy फ़ंक्शंन हैं, जो दिसंबर 1998 में मुक्त-बीएसडी 2.4 में दिखाई दिए थे। ये फ़ंक्शन सदैव गंतव्य बफर में एक एनयूएल लिखते हैं, यदि आवश्यक हो तो परिणाम को छोटा कर देते हैं, और आवश्यक बफर के आकार को वापस कर देते हैं, जो ट्रंकेशन का पता लगाने की स्वीकृति देते है और एक नया बफर बनाने के लिए एक आकार प्रदान करते है जो ट्रंकेट नहीं होते है। कथित रूप से अप्रभावी सी स्ट्रिंग (स्ट्रिंग के कुछ वैकल्पिक रूप के अतिरिक्त) के उपयोग को प्रोत्साहित करने,[98][99] और अन्य संभावित त्रुटियों को छिपाने के आधार पर उनकी आलोचना की गई है।[100][101] जिसके परिणाम स्वरूप उन्हें जीएनयू सी लाइब्रेरी (लिनक्स पर सॉफ्टवेयर द्वारा उपयोग किया जाता है) में सम्मिलित नहीं किया गया है। हालांकि उन्हें मुक्त-बीएसडी, फ्रीबीएसडी, नेटबीएसडी, सोलारिस, ओएस एक्स और क्यूएनएक्स के लिए सी लाइब्रेरी के साथ-साथ वैकल्पिक सी लाइब्रेरी में भी प्रयुक्त किया गया है। लिनक्स के लिए जैसे कि lएलआईबीबीएसडी को 2008 में प्रस्तुत किया गया था[102] और एमयूएसएल को 2011 में प्रस्तुत किया गया था।[103][104] जीएनयू सी लाइब्रेरी समर्थन की कमी ने विभिन्न सॉफ्टवेयर लेखकों को इसका उपयोग करने और अन्य एसडीएल, जीएलआईबी, एफएफएमपीईजी, आरसिंक और यहां तक ​​​​कि आंतरिक रूप से लिनक्स कर्नेल में प्रतिस्थापन को एकत्र करने से नहीं रोका है। इन फंक्शन के लिए मुक्त-स्रोत कार्यान्वयन उपलब्ध हैं।[105][106]

कभी-कभी memcpy[44]या memmove[46] का उपयोग किया जाता है, क्योंकि वे strcpy की तुलना में अधिक कुशल हो सकते हैं क्योंकि वे बार-बार NUL की जांच नहीं करते हैं आधुनिक प्रसंस्करण पर यह कम सच है। चूँकि उन्हें एक पैरामीटर के रूप में बफर लंबाई की आवश्यकता होती है, इस पैरामीटर की सही समूहिंग बफर ओवरफ्लो से बच सकती है।

2004 माइक्रोसॉफ्ट सुरक्षा विकास के रूप में माइक्रोसॉफ्ट नेstrcpy_s और strcat_s (कई अन्य के साथ) सहित "सुरक्षित" फंक्शन का एक समूह प्रस्तुत किया था।[107] इन फंक्शन को आईएसओ/आईईसी डब्ल्यूडीटीआर-24731 द्वारा प्रस्तावित वैकल्पिक सी-11 (अनुलग्नक K) के रूप में कुछ सुख्म परिवर्तनों के साथ मानकीकृत किया गया था। ये फ़ंक्शन विभिन्न जांच करते हैं, जिसमें यह भी सम्मिलित है कि स्ट्रिंग बफर में प्रयुक्त होने के लिए बहुत लंबी है या नहीं लंबी है यदि जांच विफल हो जाती है, तो उपयोगकर्ता द्वारा निर्दिष्ट "रनटाइम-बाधा हैंडलर" फ़ंक्शन को कॉल किया जाता है,[108] जो सामान्यतः प्रोग्राम को बंद कर देता है। [109][110] कुछ फ़ंक्शन रनटाइम-बाधा हैंडलर को कॉल करने से पहले विनाशकारी संचालन करते हैं। उदाहरण के लिए strcat_s गंतव्य को रिक्त स्ट्रिंग पर समूह करता है,[111] जिससे त्रुटि स्थितियों से पुनर्प्राप्त करना या उन्हें डीबग करना जटिल हो सकता है। इन फ़ंक्शंनों ने आलोचना को आकर्षित किया क्योंकि प्रारम्भ में इन्हें केवल विंडोज़ पर प्रयुक्त किया गया था और साथ ही माइक्रोसॉफ्ट विजुअल सी++ द्वारा चेतावनी संदेश भी तैयार किए जाने लगे, जिसमें प्रोग्रामर को मानक फ़ंक्शंन के अतिरिक्त इन फ़ंक्शंन का उपयोग करने का सुझाव दिया गया है। कुछ लोगों का अनुमान है कि यह माइक्रोसॉफ्ट द्वारा विकासक को अपने प्लेटफॉर्म में लॉक करने का एक प्रयास है।[112] हालाँकि इन फ़ंक्शंन का मुक्त-स्रोत कार्यान्वयन उपलब्ध है, ये फ़ंक्शंन सामान्य यूनिक्स सी लाइब्रेरी में सम्मिलित नहीं हैं।[113] इन फंक्शन के साथ अनुभव ने उन्हें अपनाने और उपयोग में त्रुटियों के साथ महत्वपूर्ण समस्याएं दिखाई हैं, इसलिए सी मानक के अगले संशोधन के लिए atoxx K को हटाने का प्रस्ताव है।[114] अवांछित कंपाइलर अनुकूलन से बचने के एक प्रकार के रूप में memset_s के उपयोग का सुझाव भी दिया गया है।[115][116]

यह भी देखें

टिप्पणियाँ

  1. On GitHub, there are 7,813,206 uses of strlcpy, versus 38,644 uses of strcpy_s (and 15,286,150 uses of strcpy).[citation needed]

संदर्भ

  1. 1.0 1.1 1.2 "The C99 standard draft + TC3" (PDF). §7.1.1p1. Retrieved 7 January 2011.{{cite web}}: CS1 maint: location (link)
  2. "The C99 standard draft + TC3" (PDF). §6.4.5p7. Retrieved 7 January 2011.{{cite web}}: CS1 maint: location (link)
  3. "The C99 standard draft + TC3" (PDF). Section 6.4.5 footnote 66. Retrieved 7 January 2011.{{cite web}}: CS1 maint: location (link)
  4. "Relax requirements on wchar_t to match existing practices" (PDF).
  5. "मौलिक प्रकार". en.cppreference.com.
  6. "स्ट्रिंग शाब्दिक". en.cppreference.com. Retrieved 23 December 2019.
  7. "stddef.h - standard type definitions". The Open Group. Retrieved 28 January 2017.
  8. Gillam, Richard (2003). Unicode Demystified: A Practical Programmer's Guide to the Encoding Standard. Addison-Wesley Professional. p. 714. ISBN 9780201700527.
  9. 9.0 9.1 "strcpy - cppreference.com". En.cppreference.com. 2 January 2014. Retrieved 6 March 2014.
  10. "wcscpy - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  11. "strncpy - cppreference.com". En.cppreference.com. 4 October 2013. Retrieved 6 March 2014.
  12. "wcsncpy - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  13. 13.0 13.1 "strcat - cppreference.com". En.cppreference.com. 8 October 2013. Retrieved 6 March 2014.
  14. "wcscat - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  15. "strncat - cppreference.com". En.cppreference.com. 1 July 2013. Retrieved 6 March 2014.
  16. "wcsncat - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  17. "strxfrm - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  18. "wcsxfrm - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  19. "strlen - cppreference.com". En.cppreference.com. 27 December 2013. Retrieved 6 March 2014.
  20. "wcslen - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  21. "strcmp - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  22. "wcscmp - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  23. "strncmp - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  24. "wcsncmp - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  25. "strcoll - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  26. "wcscoll - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  27. "strchr - cppreference.com". En.cppreference.com. 23 February 2014. Retrieved 6 March 2014.
  28. "wcschr - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  29. "strrchr - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  30. "wcsrchr - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  31. "strspn - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  32. "wcsspn - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  33. "strcspn - cppreference.com". En.cppreference.com. 31 May 2013. Retrieved 6 March 2014.
  34. "wcscspn - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  35. "strpbrk - cppreference.com". En.cppreference.com. 31 May 2013. Retrieved 6 March 2014.
  36. "wcspbrk - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  37. "strstr - cppreference.com". En.cppreference.com. 16 October 2013. Retrieved 6 March 2014.
  38. "wcsstr - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  39. "strtok - cppreference.com". En.cppreference.com. 3 September 2013. Retrieved 6 March 2014.
  40. "wcstok - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  41. "strerror - cppreference.com". En.cppreference.com. 31 May 2013. Retrieved 6 March 2014.
  42. "memset - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  43. "wmemset - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  44. 44.0 44.1 "memcpy - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  45. "wmemcpy - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  46. 46.0 46.1 "memmove - cppreference.com". En.cppreference.com. 25 January 2014. Retrieved 6 March 2014.
  47. "wmemmove - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  48. "memcmp - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  49. "wmemcmp - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  50. "memchr - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  51. "wmemchr - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  52. "mblen - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  53. "mbtowc - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  54. "wctomb - cppreference.com". En.cppreference.com. 4 February 2014. Retrieved 6 March 2014.
  55. "mbstowcs - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  56. "wcstombs - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  57. "btowc - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  58. "wctob - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  59. "mbsinit - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  60. "mbrlen - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  61. "mbrtowc - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  62. "wcrtomb - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  63. "mbsrtowcs - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  64. "wcsrtombs - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  65. "6.3.2 Representing the state of the conversion". The GNU C Library. Retrieved 31 January 2017.
  66. "root/src/multibyte/c16rtomb.c". Retrieved 31 January 2017.
  67. "Contents of /stable/11/lib/libc/locale/c16rtomb.c". Retrieved 31 January 2017.
  68. "atof - cppreference.com". En.cppreference.com. 31 May 2013. Retrieved 6 March 2014.
  69. "atoi, atol, atoll - cppreference.com". En.cppreference.com. 18 January 2014. Retrieved 6 March 2014.
  70. "strtof, strtod, strtold - cppreference.com". En.cppreference.com. 4 February 2014. Retrieved 6 March 2014.
  71. "strtof, strtod, strtold - cppreference.com". En.cppreference.com. 4 February 2014. Retrieved 6 March 2014.
  72. "strtof, strtod, strtold - cppreference.com". En.cppreference.com. 4 February 2014. Retrieved 6 March 2014.
  73. "wcstof, wcstod, wcstold - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  74. "wcstof, wcstod, wcstold - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  75. "wcstof, wcstod, wcstold - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  76. "strtol, strtoll - cppreference.com". En.cppreference.com. 4 February 2014. Retrieved 6 March 2014.
  77. "wcstol, wcstoll - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  78. "strtoul, strtoull - cppreference.com". En.cppreference.com. 4 February 2014. Retrieved 6 March 2014.
  79. "wcstoul, wcstoull - cppreference.com". En.cppreference.com. Retrieved 6 March 2014.
  80. "WG14-N3020 : Qualifier-preserving standard library functions, v4" (PDF). open-std.org. 13 June 2022.
  81. C99 Rationale, 7.20.1.1
  82. "bzero". The Open Group. Retrieved 27 November 2017.
  83. "bzero(3)". OpenBSD. Retrieved 27 November 2017.
  84. "memccpy". Pubs.opengroup.org. Retrieved 6 March 2014.
  85. "mempcpy(3) - Linux manual page". Kernel.org. Retrieved 6 March 2014.
  86. "strcasecmp(3) - Linux manual page". Kernel.org. Retrieved 6 March 2014.
  87. "strcat_s, wcscat_s, _mbscat_s". docs.microsoft.com. Retrieved 22 April 2022.
  88. "strcpy_s, wcscpy_s, _mbscpy_s, _mbscpy_s_l". docs.microsoft.com. Retrieved 22 April 2022.
  89. "strdup". Pubs.opengroup.org. Retrieved 6 March 2014.
  90. "strerror(3) - Linux manual page". man7.org. Retrieved 3 November 2019.
  91. "String | stricmp()". C Programming Expert.com. Retrieved 6 March 2014.
  92. 92.0 92.1 "strlcpy, strlcat — size-bounded string copying and concatenation". OpenBSD. Retrieved 26 May 2016.
  93. 93.0 93.1 93.2 Todd C. Miller; Theo de Raadt (1999). "strlcpy and strlcat – consistent, safe, string copy and concatenation". USENIX '99.
  94. "strsignal". Pubs.opengroup.org. Retrieved 6 March 2014.
  95. "strtok". Pubs.opengroup.org. Retrieved 6 March 2014.
  96. "char, wchar_t, char8_t, char16_t, char32_t". docs.microsoft.com (in English). Retrieved 1 August 2022.
  97. 97.0 97.1 "<cuchar> (uchar.h)" (in English).
  98. libc-alpha mailing list, selected messages from 8 August 2000 thread: 53, 60, 61
  99. The ups and downs of strlcpy(); LWN.net
  100. "strlcpy() को glibc में जोड़ना". lwn.net. Correct string handling means that you always know how long your strings are and therefore you can you memcpy (instead of strcpy).
  101. strlcpy(3) – Linux Library Functions Manual "However, one may question the validity of such optimizations, as they defeat the whole purpose of strlcpy() and strlcat(). As a matter of fact, the first version of this manual page got it wrong."
  102. "libbsd". Retrieved 21 November 2022.
  103. "root/src/string/strlcpy.c". Retrieved 28 January 2017.
  104. "root/src/string/strlcat.c". Retrieved 28 January 2017.
  105. Todd C. Miller. "strlcpy.c". BSD Cross Reference.
  106. Todd C. Miller. "strlcat.c". BSD Cross Reference.
  107. Lovell, Martyn. "Repel Attacks on Your Code with the Visual Studio 2005 Safe C and C++ Libraries". Retrieved 13 February 2015.
  108. "C11 मानक मसौदा" (PDF). §K.3.1.4p2. Retrieved 13 February 2013.{{cite web}}: CS1 maint: location (link)
  109. "C11 मानक मसौदा" (PDF). §K.3.6.1.1p4. Retrieved 13 February 2013.{{cite web}}: CS1 maint: location (link)
  110. "पैरामीटर सत्यापन".
  111. "C11 मानक मसौदा" (PDF). §K.3.7.2.1p4. Retrieved 13 February 2013.{{cite web}}: CS1 maint: location (link)
  112. Safe C Library. "The Safe C Library provides bound checking memory and string functions per ISO/IEC TR24731". Sourceforge. Retrieved 6 March 2013.
  113. Danny Kalev. "वे इसे फिर से कर रहे हैं". InformIT. Archived from the original on 15 January 2012. Retrieved 10 November 2011.
  114. "Field Experience With Annex K — Bounds Checking Interfaces". Retrieved 5 November 2015.
  115. "MSC06-C. Beware of compiler optimizations". SEI CERT C Coding Standard.
  116. memset_s(3) – FreeBSD Library Functions Manual


बाहरी संबंध

  • Fast memcpy in C, multiple C coding examples to target different types of CPU instruction architectures