সি বা সি ++ এ একক উদ্ধৃতি বনাম ডাবল উদ্ধৃতি


উত্তর:


282

সি এবং সি ++ এ একক উদ্ধৃতিগুলি একটি একক অক্ষর সনাক্ত করে, যখন ডাবল উদ্ধৃতিগুলি একটি স্ট্রিং আক্ষরিক তৈরি করে। 'a'একটি একক অক্ষর আক্ষরিক, অন্যদিকে একটি নাল টার্মিনেটরযুক্ত "a"স্ট্রিং আক্ষরিক 'a'(এটি একটি 2 চর অ্যারে)।

C ++ একটি অক্ষর আক্ষরিক প্রকার char, কিন্তু সি, একটি অক্ষর আক্ষরিক প্রকার দয়া করে মনে রাখবেন int, যে হয় sizeof 'a', একটি স্থাপত্য যেখানে আছে ints 32bit (এবং CHAR_BIT 8) 4 থাকাকালীন sizeof(char)সর্বত্র 1।


47

কিছু সংকলক এছাড়াও একটি এক্সটেনশন বাস্তবায়ন করে, এটি মাল্টি-ক্যারেক্টার ধ্রুবকগুলিকে মঞ্জুরি দেয়। সি 99 স্ট্যান্ডার্ড বলেছেন:

6.4.4.4p10: "একটি পূর্ণসংখ্যার অক্ষরের মান ধ্রুবক একাধিক অক্ষর (উদাহরণস্বরূপ, 'আব') ধারণ করে, বা একটি অক্ষর বা পলায়ন ক্রম ধারণ করে যা একক বাইট প্রয়োগের অক্ষরকে মানচিত্র করে না, বাস্তবায়ন-সংজ্ঞায়িত হয়। "

এটি উদাহরণস্বরূপ:

const uint32_t png_ihdr = 'IHDR';

ফলস্বরূপ ধ্রুবক (এটি জিসিসিতে, এটি প্রয়োগ করে) এর প্রতিটি অক্ষর গ্রহণ করে এবং এটিকে সরিয়ে নিয়ে আপনি যে মানটি পান তা হ'ল যাতে 'আমি' 32-বিট মানটির সর্বাধিক উল্লেখযোগ্য বিটগুলিতে শেষ হয়। স্পষ্টতই, আপনি প্ল্যাটফর্মের স্বতন্ত্র কোডটি লিখলে আপনার উপর নির্ভর করা উচিত নয়।


7
ধন্যবাদ, আমি এটি কিছু কোডে দেখেছি এবং আমার প্রতিক্রিয়াটি কেবল "ডাব্লুটিএফ" হিসাবে বর্ণনা করা যেতে পারে। আমি 15 বছর ধরে জিসিসি চালু এবং বন্ধ ব্যবহার করে আসছি এবং এখন পর্যন্ত একবারে এর আগে কখনও চালানো হয়নি।
eeeeaaii

জাদু শিরোনাম ছাড়াও +1, প্রায়শই কমান্ড লাইন মূল্যায়নের জন্য ব্যবহৃত হয়।
ওল্ফ

28

একক উদ্ধৃতিগুলি অক্ষর ( char), ডাবল উদ্ধৃতিগুলি নাল-টার্মিনেটেড স্ট্রিং ( char *) (

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

8
"হ্যালো ওয়ার্ল্ড" এ const char *
ওল্ডস্কুল

@ আইকো আপনি যখন উপরে যেমন একটি পরিবর্তনশীল যেমন * এস এর * মুখোমুখি রাখেন?
কোডগুরু

@ কোডগুরু আপনি যখন একটি পরিবর্তনক পয়েন্টার টাইপ হয় ব্যবহার করুন। এই ক্ষেত্রে, 'গুলি' একটি অক্ষরের অ্যারে নির্দেশ করে।
একো

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'; এটি ঘটে যা এটি মূলত একটি পূর্ণসংখ্যার বাইট-বুদ্ধিযুক্ত অনুলিপি। সুতরাং এটি দেখার উপায়টি হল যে 'সিসি' যা মূলত 2 গ এর পূর্ণসংখ্যা সিসির 2 বাইট নিচে কপি করা হয়। আপনি যদি একটি ট্রিভিয়া খুঁজছেন, তারপর

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

25 25443

এটি কারণ 25443 = 99 + 256 * 99

সুতরাং 'সিসি' একটি বহু-চরিত্র ধ্রুবক এবং না একটি স্ট্রিং।

চিয়ার্স



6

ডাবল উদ্ধৃতিগুলি স্ট্রিং লিটারেলের জন্য যেমন:

char str[] = "Hello world";

একক উদ্ধৃতি একক অক্ষরের আক্ষরিক জন্য, যেমন:

char c = 'x';

সম্পাদনা করুন ডেভিড যেমন অন্য একটি উত্তরে বলেছিলেন, আক্ষরিক চরিত্রের ধরণটি int


ধন্যবাদ মানে অক্ষরটি 1 বাইট যার শেষে নাল অক্ষর নেই '/ 0'at শেষে .. স্ট্রিংয়ের শেষে নাল অক্ষর থাকে।
বিশ্বনাথ দলভী

2
@ এমআর_এক্লেয়ার: একটি স্ট্রিং আক্ষরিক সর্বদা একটি অন্তর্নিহিত নাল টার্মিনেটর থাকে তবে সাবধান হন। আপনি ভালো কিছু লিখতে পারে char str[] = {'H','e','l','l','o'};, এবং strহবে না একটি নাল টারমিনেটর আছে।
অলিভার চার্লসওয়ার্থ

এই পরিস্থিতিতে, strকোনও স্ট্রিং নয় (কমপক্ষে, কোনও সি-স্টাইলের স্ট্রিং নয়, যা এনটিবিএস হিসাবে সংজ্ঞায়িত হয়েছে)।
স্টিভ জেসোপ

@ স্টিভ: বোঝা গেছে। @ মিআর_এক্লেয়ারের প্রতি আমার বক্তব্যটি হ'ল যে char[](যা লোকেরা প্রায়শই "স্ট্রিং" হিসাবে পরিচিত) এর সবকিছুই বাতিল-সমাপ্ত হয় না।
অলিভার চার্লসওয়ার্থ

1
@OliCharlesworth এই হল - সৌভাগ্যবশত - না পূর্ণ সত্য: এই হল দুই স্ট্রিং লিটারেল একটি মন্তব্য দ্বারা পৃথক: "hello" /*seamlessly connected to*/ "world"। এবং এটি মন্তব্য করা বহু-লাইন বার্তাগুলির জন্য অর্থ তৈরি করতে পারে।
ওল্ফ

6

সি-তে সিলেক্ট কোট যেমন 'ক' অক্ষর ধ্রুবক নির্দেশ করে যেখানে "ক" একটি অক্ষরের অ্যারে থাকে, সর্বদা 0 টি অক্ষরের সাথে শেষ হয়


4

একক উদ্ধৃতি অক্ষর জন্য ব্যবহৃত হয়, ডাবল উদ্ধৃতি স্ট্রিং জন্য ব্যবহৃত হয়।

উদাহরণ স্বরূপ..

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

আউটপুট

একটি হ্যালো ওয়ার্ল্ড

যদি আপনি এগুলি বিপরীত ক্ষেত্রে ব্যবহার করেন এবং স্ট্রিংয়ের জন্য একক উদ্ধৃতি এবং চরিত্রের জন্য ডাবল উদ্ধৃতি ব্যবহার করেন used এখানে, এটি ফলাফল হবে;

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

আউটপুট:

প্রথম লাইনের জন্য You আপনার আবর্জনা মান বা অপ্রত্যাশিত হবে or অথবা আপনার মতো ফলাফল হতে পারে ..

দ্বিতীয় বিবৃতি জন্য যখন। আপনি কিছুই দেখতে পাবেন না। আরও একটি বিষয়। এর পরে যদি আপনার আরও বক্তব্য থাকে। তারা আপনাকে কোনও ফল দেবে না।

দ্রষ্টব্য: পিএইচপি ভাষা আপনাকে একক এবং ডাবল উদ্ধৃতি সহজেই ব্যবহার করতে নমনীয়তা দেয়।


3

একক উদ্ধৃতিগুলি একটি চরকে চিহ্নিত করছে, একটি স্ট্রিংকে ডাবল বোঝায়।

জাভাতেও এটি একই রকম।


2
এটি ইতিমধ্যে প্রশ্নের কোনও মান যুক্ত করে না, যেহেতু এই উত্তরটি ইতিমধ্যে অন্যান্য উত্তরে অন্তর্ভুক্ত রয়েছে।
মাইক প্রাক্পআপ

2

একক চর হিসাবে একক উদ্ধৃতি ব্যবহার করুন:

char ch = 'a';

এখানে 'a'একটি চর ধ্রুবক এবং ASCIIচরের মান এর সমান ।

স্ট্রিং সহ ডাবল উদ্ধৃতি ব্যবহার করুন:

char str[] = "foo";

এখানে "foo"একটি স্ট্রিং আক্ষরিক।

এটি ব্যবহার করা ঠিক আছে "a"তবে এটি ব্যবহার করা ঠিক নয় 'foo'

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.