एकल उद्धरण बनाम सी या सी ++ में दोहरे उद्धरण


जवाबों:


282

C और C ++ में सिंगल कोट्स एकल वर्ण की पहचान करते हैं, जबकि दोहरे उद्धरण एक स्ट्रिंग शाब्दिक बनाते हैं। 'a'एक एकल अक्षर शाब्दिक है, जबकि "a"एक स्ट्रिंग शाब्दिक है जिसमें एक 'a'और एक शून्य टर्मिनेटर है (जो कि 2 वर्ण सरणी है)।

C ++ में एक अक्षर शाब्दिक का प्रकार है char, लेकिन ध्यान दें कि C में, एक वर्ण शाब्दिक का प्रकार है int, जो कि sizeof 'a'एक आर्किटेक्चर में 4 है जहां ints 32bit है (और CHAR_BIT 8 है), जबकि sizeof(char)हर जगह 1 है।


47

कुछ संकलक एक विस्तार को भी लागू करते हैं, जो बहु-चरित्र स्थिरांक की अनुमति देता है। C99 मानक कहता है:

6.4.4.4p10: "एक पूर्णांक वर्ण का मान जिसमें एक से अधिक वर्ण हों (जैसे, 'अब'), या एक वर्ण या एस्केप अनुक्रम जिसमें एकल-बाइट निष्पादन चरित्र के लिए मैप नहीं है, कार्यान्वयन-परिभाषित है। "

यह इस तरह दिख सकता है, उदाहरण के लिए:

const uint32_t png_ihdr = 'IHDR';

परिणामस्वरूप स्थिर (जीसीसी में, जो इसे लागू करता है) प्रत्येक वर्ण को लेने और इसे ऊपर स्थानांतरित करने से आपको प्राप्त होने वाला मूल्य होता है, जिससे कि 'I' 32-बिट मान के सबसे महत्वपूर्ण बिट्स में समाप्त होता है। जाहिर है, आपको इस पर भरोसा नहीं करना चाहिए अगर आप प्लेटफ़ॉर्म स्वतंत्र कोड लिख रहे हैं।


7
धन्यवाद, मैंने अभी इसे कुछ कोड में देखा था और मेरी प्रतिक्रिया को केवल "डब्ल्यूटीएफ" के रूप में वर्णित किया जा सकता है। मैं 15 वर्षों से GCC का उपयोग कर रहा हूं और अब तक कभी भी इसमें नहीं चला हूं।
ईवाईईई

+1 जादू हेडर के अलावा, अक्सर कमांड लाइन मूल्यांकन के लिए उपयोग किया जाता है।
वुल्फ

28

एकल उद्धरण वर्ण हैं ( char), दोहरे उद्धरण अशक्त-तार हैं ( char *)।

char c = 'x';
char *s = "Hello World";

8
"हैलो वर्ल्ड" एक है const char *
ओल्डस्कूल

@ ईको जब आप ऊपर के रूप में एक चर का एक * infront * लगाते हैं?
कोडगुरु

@CodeGuru आप एक * का उपयोग करते हैं जब चर एक सूचक प्रकार है। इस स्थिति में, 's' वर्णों की एक सरणी की ओर इशारा करता है।
ईको

16
  • 'x' एक पूर्णांक है, जो मशीन के वर्ण सेट में अक्षर x के संख्यात्मक मूल्य का प्रतिनिधित्व करता है
  • "x"वर्णों की एक सरणी है, जिसमें दो वर्ण लंबे होते हैं, ‘x’उसके बाद होते हैं‘\0’

2
काफी देर;) जो आपके उत्तर में वास्तव में नया है - पहले से दिए गए लोगों की तुलना में?
वुल्फ

10

एकल उद्धरण एकल वर्ण के लिए हैं। दोहरे उद्धरण एक स्ट्रिंग (वर्णों की सरणी) के लिए हैं। आप एक बार में एक स्ट्रिंग एक वर्ण बनाने के लिए एकल उद्धरण का उपयोग कर सकते हैं, यदि आप चाहें।

char myChar     = 'A';
char myString[] = "Hello Mum";
char myOtherString[] = { 'H','e','l','l','o','\0' };

10

मैं सामान की तरह इधर-उधर ताक रहा था: int cc = 'cc'; ऐसा होता है कि यह मूल रूप से एक पूर्णांक की बाइट-वार प्रति है। इसलिए इसे देखने का तरीका यह है कि 'cc' जो मूल रूप से 2 c का है, पूर्णांक cc के निचले 2 बाइट्स में कॉपी किया जाता है। यदि आप एक सामान्य ज्ञान की तलाश कर रहे हैं, तो

printf("%d %d", 'c', 'cc'); would give:

९९ २५४४३

ऐसा इसलिए है क्योंकि 25443 = 99 + 256 * 99

इसलिए 'cc' एक मल्टी-कैरेक्टर कंटीन्यू है न कि एक स्ट्रिंग।

चियर्स



6

डबल उद्धरण स्ट्रिंग शाब्दिक के लिए हैं, उदाहरण के लिए:

char str[] = "Hello world";

एकल उद्धरण एकल वर्ण शाब्दिक हैं, जैसे:

char c = 'x';

EDIT जैसा कि डेविड ने एक अन्य जवाब में कहा, एक चरित्र शाब्दिक का प्रकार है int


धन्यवाद । इसका मतलब है कि चरित्र 1 बाइट है जिसमें कोई अशक्त चरित्र नहीं है / '0'एट द एंड .. स्ट्रिंग में अशक्त वर्ण है।
विश्वनाथ दलवी

2
@mr_eclair: एक स्ट्रिंग शाब्दिक में हमेशा एक निहित शून्य टर्मिनेटर होता है, लेकिन सावधान रहें। आप कुछ लिख सकते हैं char str[] = {'H','e','l','l','o'};, और एक शून्य टर्मिनेटर नहींstr होगा ।
ओलिवर चार्ल्सवर्थ

उस स्थिति में, strएक स्ट्रिंग नहीं है (कम से कम, सी-स्टाइल स्ट्रिंग नहीं है, जिसे एनटीबीएस के रूप में परिभाषित किया गया है)।
स्टीव जेसप

@ पाठ: समझ में आया। @Mr_eclair से मेरा कहना था कि वह सब कुछ नहीं है char[]जो (जो लोग अक्सर "स्ट्रिंग्स" की बात करते हैं) शून्य-समाप्त हो जाता है।
ओलिवर चार्ल्सवर्थ

1
@OliCharlesworth यह है - सौभाग्य से - पूर्ण सत्य नहीं: ये एक टिप्पणी द्वारा दो स्ट्रिंग शाब्दिक हैं "hello" /*seamlessly connected to*/ "world":। और यह टिप्पणी मल्टी-लाइन संदेशों के लिए समझ में आ सकता है।
वुल्फ

6

C सिंगल कोट्स में 'a' कैरेक्टर कॉन्स्टेंट को इंगित करता है जबकि "a" अक्षर का एक सरणी है, जिसे हमेशा O अक्षर के साथ समाप्त किया जाता है


4

एकल उद्धरण का उपयोग वर्ण के लिए किया जाता है, जबकि स्ट्रिंग के लिए दोहरे उद्धरण का उपयोग किया जाता है।

उदाहरण के लिए..

 printf("%c \n",'a');
 printf("%s","Hello World");

उत्पादन

एक हैलो वर्ल्ड

यदि आप इसके विपरीत मामले में इस्तेमाल करते हैं और चरित्र के लिए स्ट्रिंग और डबल उद्धरण के लिए एकल उद्धरण का उपयोग करते हैं। यहाँ, यह परिणाम होगा;

  printf("%c \n","a");
  printf("%s",'Hello World');

आउटपुट:

पहली पंक्ति के लिए। आपके पास कचरा मूल्य या अप्रत्याशित होगा। या आपके पास इस तरह का उत्पादन हो सकता है।

जबकि दूसरे कथन के लिए। आप कुछ नहीं देखेंगे। एक बात और। यदि आपके पास इसके बाद अधिक बयान है। वे आपको कोई परिणाम भी नहीं देंगे।

नोट: PHP भाषा आपको आसानी से एकल और दोहरे उद्धरण का उपयोग करने की सुविधा देती है।


3

सिंगल कोट्स एक चार को दर्शा रहे हैं, डबल एक स्ट्रिंग को दर्शाते हैं।

जावा में, यह भी वही है।


2
यह वास्तव में प्रश्न के लिए कोई मूल्य नहीं जोड़ता है, क्योंकि यह जानकारी पहले से ही अन्य उत्तरों में शामिल है।
माइक प्रीपी

2

एकल चार के साथ एकल उद्धरण का उपयोग करें:

char ch = 'a';

यहाँ 'a'एक चार स्थिरांक है और इसके बराबर हैASCII चार a मान के है।

स्ट्रिंग के साथ दोहरे उद्धरण का उपयोग करें:

char str[] = "foo";

यहाँ "foo" एक स्ट्रिंग शाब्दिक है।

इसका उपयोग करने के लिए ठीक है "a"लेकिन उपयोग करने के लिए ठीक नहीं है 'foo'

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.