সি এর একটি স্ট্রিং এর সংজ্ঞা নির্দিষ্টকরণ কি?


10

আমার এক ক্লাসের জন্য হোমওয়ার্ক প্রশ্নের উত্তর দেওয়ার কথা supposed বিশেষত, আমি সি বলে নির্দিষ্ট অ্যারেগুলি স্ট্রিং হিসাবে বিবেচনা করা হয় কিনা তা বলার কথা। এই নিবন্ধটির উপর ভিত্তি করে ( https://www.geeksforgeeks.org/strings-in-c-2/ ) আমি জানি যে স্ট্রিংগুলি শেষে নাল টার্মিনেটর সহ অক্ষরের একটি অ্যারে।

আমার প্রধান হ্যাঙ্গআপটি এমন প্রশ্নের একটি অংশ যা এমন অ্যারে সম্পর্কে জিজ্ঞাসা করে যা দেখতে দেখতে:

char c1[] = { 'C', 'S', '\0', '3', '2', '4', '\0' };

এটি অবশ্যই শেষে একটি নাল টার্মিনেটিং অক্ষর সহ একটি অক্ষরের অ্যারে। যাইহোক, এটি এখনও একটি স্ট্রিং হিসাবে বিবেচিত হয় কারণ এটির মাঝখানে নাল টার্মিনেটিং চরিত্রটিও রয়েছে? কিভাবে স্ট্রিং প্রভাবিত করবে?

সম্পাদনা: মন্তব্যের ভিত্তিতে আমি প্রশ্নের আসল শব্দটি সরবরাহ করেছি:

"স্ট্রাইকপি (), স্ট্রেনকিপি (), স্ট্রিংসিপি (), স্ট্রেনসিএমপি (), এবং অনুরূপ স্ট্রিং ফাংশন (সমস্ত প্রয়োগের ইঙ্গিত দেয়) হিসাবে যুক্তি হিসাবে ব্যবহার করার উদ্দেশ্যে নিম্নলিখিত অ্যারেগুলির মধ্যে" স্ট্রিং "হিসাবে বিবেচনা করা যেতে পারে?"

সম্পাদনা: প্রশ্নটি অস্পষ্টভাবে বর্ণিত বলে মনে হচ্ছিল (বেশ কয়েকটি লোক যেমন উল্লেখ করেছেন) আমি এটি সম্পর্কে আমার অধ্যাপককে ইমেল করেছি। যদি কেউ আগ্রহী হন তবে তিনি আমাকে বললেন "হ্যাঁ এটি একটি স্ট্রিং key মূলটি হ'ল একটি নাল চরিত্র রয়েছে But তবে অবশ্যই এটি কোনও স্ট্রিং ক্রিয়াকলাপকে প্রভাবিত করবে; স্ট্রিংটি নাল চরিত্রের শেষে শেষ হবে।"


4
আপনি বলতে পারেন যে এটি "CS"আবদ্ধ আবর্জনার কয়েকটি বাইট সহ স্ট্রিং (যার ক্ষেত্রে চূড়ান্ত NUL চরিত্রটি অপ্রাসঙ্গিক)। তবে এটি "সামগ্রিকভাবে" স্ট্রিং নয়। - তবুও, strcpyএগুলিকে খাওয়ানো আপনার পিসি বিস্ফোরিত হবে না কারণ এই ফাংশনগুলি কেবল " "CS"অংশ " দেখবে ।
হ্যাগেন ফন ইটজেন

2
সি 1 একেবারে যুক্তি হিসাবে ব্যবহার করা যেতে পারে strcmp()। এটি স্ট্রিং ফাংশনগুলিকে পরিবর্তনের পক্ষে যুক্তি হিসাবে ব্যবহার করা যেতে পারে কিনা তা সরবরাহ করা হয়নি এমন অতিরিক্ত কারণগুলির উপর নির্ভর করে।
ইওএফ

2
সামগ্রীর বিষয়বস্তু c1পরিবর্তনযোগ্য, তাই strcpyউত্সের স্ট্রিংকে সামঞ্জস্য করার পক্ষে এটি যথেষ্ট বড় না হওয়ায় কেন এটি বৈধ গন্তব্য যুক্তি বা অনুরূপ হতে ব্যর্থ হবে তা আমি দেখতে পাই না । এটি এটিকে স্ট্রিং হিসাবে তৈরি করবে না, কেবল কোনও নির্দিষ্ট উদ্দেশ্যে উপযুক্ত নয়।
জন বলিঞ্জার

1
সামগ্রিকভাবে, আমি সম্মত হই যে প্রশ্নটি অস্পষ্টভাবে বর্ণিত হয়েছে। অভিব্যক্তিটি c1স্ট্যান্ডার্ড আর্কিটিকের সমস্ত স্ট্যান্ডার্ড লাইব্রেরির (সংকীর্ণ) স্ট্রিং ফাংশনগুলির সাথে বিশেষভাবে নামযুক্ত সমস্তগুলি যুক্ত করার জন্য প্রয়োজনীয় প্রয়োজনীয়তাগুলি পূরণ করবে, তবে আচরণটি কলার প্রত্যাশা বা চান তা নয় (এমনকি নির্ধারিত অপরিবর্তিত আচরণগুলিও উপেক্ষা করে)।
জন বলিঞ্জার

1
নোট করুন যে প্রকারটি প্রয়োজন হবে না char। যে কোনও চরিত্রের ধরণটি করবে।
chux -

উত্তর:


8

c1বেশিরভাগ [1] সমান &c1[0], যা একটি স্ট্রিং ধারণ করে "CS",।

এক সেকেন্ডের নাই সেখানে লুকোনোর, স্ট্রিং এর "324", থেকে শুরু &c1[3]- কিন্তু যতদিন না পর্যন্ত আপনি অ্যাক্সেস করার অনুমতি c1যেমন c1, স্ট্রিং "CS"সব ফাংশন হয় strcpy()এট অল। দেখতে হবে.


[1]: c1একটি অ্যারে, &c1[0]পয়েন্টার।


সুতরাং, c1একটি strcpy()কমান্ডের লক্ষ্য স্ট্রিং হিসাবে ব্যবহার করা কি যথাযথ ? প্রশ্নটি দ্ব্যর্থক - সর্বোত্তম।
অ্যান্ড্রু হেনেল

1
অবশ্যই আপনি c1উভয় হিসাবে যুক্তি হিসাবে ব্যবহার করতে পারেন strcpy()। এটি প্রতিটি অর্থে একেবারে সাধারণ স্ট্রিং। সাধারণ স্ট্রিংগুলিতে প্রায়শই তাদের টার্মিনেটরগুলির পরে অবশিষ্ট জঞ্জাল থাকে। এই আবর্জনাটি প্রোগ্রামটিতে কঠোরভাবে কোডড থাকা এই সত্যটি এই ধারণাটি দেয় যে লেখক c1নন-স্ট্রিং পদ্ধতিতে ব্যবহার করতে চান , তবে এটি প্রশ্নের অংশ ছিল না।
লি ড্যানিয়েল ক্রকার

" বিভ্রান্তির c1সমতুল্য &c1[0]"। c1একটি অ্যারে হয়। &c1[0]একটি পয়েন্টার।
chux -

2

আপনি যদি কোনও স্ট্রিংয়ের সংজ্ঞাটির সুনির্দিষ্ট বিবরণ জানতে চান তবে উত্সটিতে যান।

সি 90 স্ট্যান্ডার্ড থেকে :

7 গ্রন্থাগার

7.1 ভূমিকা

.1.১.১ পদগুলির সংজ্ঞা
একটি স্ট্রিং প্রথম নাল অক্ষর দ্বারা সমাপ্ত হওয়া এবং অন্তর্ভুক্ত অক্ষরের সংমিশ্রিত ক্রম। একটি স্ট্রিং একটি "পয়েন্টার" তার প্রাথমিক (নিম্নতম সম্বোধিত) অক্ষরের পয়েন্টার। স্ট্রিংয়ের "দৈর্ঘ্য" হ'ল শূন্য অক্ষরের আগের অক্ষরের সংখ্যা এবং এর "মান" হ'ল অক্ষরের ক্রম অনুসারে ক্রম হয়।

(পরবর্তী মানদণ্ডে কোনও প্রাসঙ্গিক পরিবর্তন হয়নি।)

সুতরাং, c1দুটি পরপর দুটি স্ট্রিং, "সিএস" এবং "324" রয়েছে তবে এটি নিজেই একটি স্ট্রিং নয়।

যদি আমরা কোনও ফাংশনে অ্যারে পাস করি তবে এটি তার প্রথম উপাদানটির দিকে একটি পয়েন্টারকে স্থির করে, এভাবে +c1একটি স্ট্রিং (প্রথমটি) নির্দেশ করে, যা কোনও পংক্তির কাছে পয়েন্টার প্রত্যাশা করে কোনও ফাংশনের পক্ষে যথেষ্ট ভাল। এটি একটি স্ট্রিং "সিএস \ 0324" এ নির্দেশ করে না, তবে এটি সম্ভবত আপনার প্রশিক্ষকদের প্রশ্নের পক্ষে যথেষ্ট, যা দ্ব্যর্থক।


4
আমি যুক্তি দিয়ে বলব যে এই সংজ্ঞা দ্বারা, সি 1 স্পষ্টভাবে "সিএস" স্ট্রিং। সময়কাল। টার্মিনেটরটি অপ্রাসঙ্গিক হওয়ার পরে এটিতে শূন্য-বাইট থাকতে পারে - তাদের জীবনকালে অনেকগুলি স্ট্রিং এরকম হবে।
লি ড্যানিয়েল ক্রকার

+c1একটি স্ট্রিংকে নির্দেশ করে, কারণ c1একটি স্ট্রিং দিয়ে শুরু হয়। এটি কোনও উপায়ে, আকার বা ফর্ম c1কোনও স্ট্রিং তৈরি করে না।
21:37

2
এটি মেমরির একটি অংশের ঠিকানা যা শূন্য বাইট দ্বারা শেষ হওয়া কিছু অক্ষর রয়েছে। যদি প্রিন্টফ () ঠিক একটি% s দিয়ে জরিমানা হয় তবে এটি স্ট্রেন () কে উত্তমরূপে উত্তম নম্বর দেয়, টিআরসিপিপি () ইত্যাদিতে পাস হলে কাজ করবে ইত্যাদি আমার কাছে স্ট্রিংয়ের মতো মনে হচ্ছে।
লি ড্যানিয়েল ক্রকার


অবশ্যই. তবে অ্যারেগুলি অবশ্যই স্ট্রিং হতে পারে।
লি ড্যানিয়েল ক্রকার

0

@ দেবসোলার এর উত্তরে যুক্ত করা, প্রদত্ত স্ট্রিংটির সাথে টোটিংয়ের পরে আমি আবিষ্কার করেছি এমন কিছু যদি তা হয়:

char c1[] = { 'C', 'S', '\\0', '3', '2', '4', '\\0' };

আপনি যদি এই স্ট্রিংটিকে আউটপুট দেন তবে আপনি পাবেন CS03240এবং এই স্ট্রিংয়ের আকার 7. হবে my যতক্ষণ আমার বোঝার বোধ হয়, \\0নাল চরিত্রটি বোঝাতে ব্যবহৃত হয় ( যেমন \0 )) যদি তুমি করো:

printf("\0");

আউটপুট লগটিতে আপনি কিছুই দেখতে পাচ্ছেন না তবে আপনি যদি করেন:

printf("\\0");

আপনি একটি দেখুন \0, যা ব্যাকস্ল্যাশগুলি বা উদ্ধৃতিগুলির মতো বিশেষ অক্ষরগুলি আউটপুট করার জন্য প্রত্যাশিত \

আমার কাছে ধাঁধাটি কিছু যা আউটপুট CS03240এবং এটির আকার 7. এটি সাধারণভাবে বোঝা যায় যে স্ট্রিংয়ের আকার এটির চেয়ে বেশি অক্ষরের সংখ্যা (নাল অক্ষরের জন্য)। এছাড়াও, আকারটি স্ট্রিংয়ের জন্য এমনকি 7 char c1[] = { 'C', 'S', '\0', '3', '2', '4', '\0' };

তাই সম্ভবত এই প্রশ্ন একটি অনুসরণ, এখানে কি চলছে?


1
'\\0'একটি নয় নাল অক্ষর । এটি একটি বহু-চরিত্রের ধ্রুবক। এটা তোলে পরিসীমা বাইরে একটি বাস্তবায়ন সংজ্ঞায়িত মান অবশ্যই হয়েছে charc1[]এতে কোনও স্ট্রিং নয় কারণ এতে শূন্য চরিত্রের অভাব রয়েছে । "আপনি এই স্ট্রিং আউটপুট" সম্ভাব্য অপরিশোধিত আচরণের ফলাফল ।
chux -

আমি বহু চরিত্রের ধ্রুবকগুলি সন্ধান করেও আমি আপনাকে ঠিক পাইনি get যদি সি 1 [] একটি স্ট্রিং নয় কারণ এর শেষে শূন্য চরিত্র নেই, তবে ওপিতে পোস্ট করা হিসাবে কেন প্রাথমিক আকারে আকারটি 7 হিসাবে প্রকাশ পাচ্ছে?
রাসেঙ্গান__

char c1[] = { 'C', 'S', '\0', '3', '2', '4', '\0' };আকার 7 হয় কারণ এটি 7 টি মান দিয়ে শুরু করা হয়। এটা তোলে আকার সঙ্গে কিছুই করার আছে স্ট্রিংchar c1[] = { 1, 2, 3, 4, 5, 6, 7 };তারপরেও এটি আকার 7 করবে
chux -

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