মডিউল ১০-২: স্ট্রিং ইনিশিয়ালাইজ এবং প্রিন্ট

আমরা বলেছিলাম স্ট্রিং এর কিছু স্পেশাল পাওয়ার আছে। প্রথম পাওয়ারটি হলো ইনিশিয়ালাইজেশন। স্ট্রিং নরমালি অন্য এরের মতো ইনিশিয়ালাইজ করা যায় আবার এক লাইনেও ইনিশিয়ালাইজ করা যায়।

#include<stdio.h>
int main()
{
    char a[5]={'R','a','h','a','t'}; // অন্য এরের মতো {} ব্রাকেট দিয়ে কমা দিয়ে দিয়ে ভেলু দিয়ে ইনিশিয়ালাইজ করা যায়। 
    char a[5]="Rahat";   // স্পেশাল পাওয়ারঃ এক লাইনে ব্রাকেট কমা ছাড়া জাস্ট ডাবল কোটেশনের মধ্যে রেখেও ইনিশিয়ালাইজ করা যায়।
    return 0;
}

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

#include<stdio.h>
int main()
{
    char a[5]="Hello";
    printf("%s",a);
    return 0;
}

এই কোডটি রান করলে আমরা দেখতে পারব Hello প্রিন্ট হয়েছে এবং Hello এর পরে আরো কিছু গারবেজ ভেলু প্রিন্ট হয়ে গেছে। আমরা যখন লুপ চালিয়ে স্ট্রিং প্রিন্ট করি তখন আমরা স্পেসিফিক ভাবে বলে দেই যে লুপটি কতবার চলবে। কিন্তু এখানে আমরা %s ব্যাবহার করে প্রিন্ট করছি। এখানে আমরা বলে দিচ্ছি না কোন পর্যন্ত প্রিন্ট করতে হবে। এখানে %s যা করে, সে স্ট্রিং এর শেষ পর্যন্ত প্রিন্ট করে দেয়। এখন কথা হলো সে কিভাবে বুঝবে যে স্ট্রিং কোথায় শেষ? এটি বুঝানোর জন্যই সি প্রোগ্রামিং এ একটি স্পেশাল ক্যারেক্টার আছে তা হলো নাল ক্যারেক্টার। নাল ক্যারেক্টার প্রকাশ করা হয় '\0' দিয়ে। আমরা স্ট্রিং এর শেষে নাল ক্যারেক্টার রেখে দেই, তাহলে %s বুঝতে পারে এখানে স্ট্রিং শেষ এবং তখন সে আর গারবেজ ভেলু প্রিন্ট করে না।

#include<stdio.h>
int main()
{
    char a[6]="Hello\0";  // স্ট্রিং শেষে আমরা নাল ক্যারেক্টার রেখে দিচ্ছি এবং নাল সহ সাইজ ৬ হয় তাই আমরা ৬ সাইজ দিয়েছি। 
    printf("%s",a);
    return 0;
}

এই কোডটি রান করলে আমরা দেখব শুধু Hello প্রিন্ট হয়েছে প্রোপারলি। এখন মনে প্রশ্ন জাগতে পারে যে, তাহলে কি আমাকে সবসময় নিজে থেকে নাল ক্যারেক্টার বসিয়ে দিতে হবে? উত্তর হচ্ছে না। আমরা যখন ডাবল কোটেশন দিয়ে স্ট্রিং ইনিশিয়ালাইজ করছি তখন সে অটোমেটিক নাল বসিয়ে দিবে যদি আমি তাকে নাল বসানোর জন্য জায়গা দিয়ে রাখি। প্রথম ক্ষেত্রে আমরা যখন লিখেছিলাম char a[5]="Hello"; তখন আমরা সাইজ দিয়েছি ৫। তাই সে এখানে অটোমেটিক নাল বসাতে পারেনি। কারন নাল বসানোর জায়গা তাকে দেই নি আমরা। আমরা যদি সাইজ ৬ দিতাম তাহলে সে নিজে থেকে নাল বসিয়ে দিত, আমাদের আর কষ্ট করে নাল বসাতে হতো না।

#include<stdio.h>
int main()
{
    char a[6]="Hello";   // আমাদের স্ট্রিং ৫ সাইজের কিন্তু আমরা এরে ডিক্লেয়ার করার সময় সাইজ দিচ্ছি ৬। ১ বেশি দেওয়া হচ্ছে নাল ক্যারেক্টার এর জন্য।
    printf("%s",a);
    return 0;
}

এই কোডটি রান করলে দেখব ঠিকঠাক ভাবে Hello প্রিন্ট হচ্ছে। যদিও আমরা এখানে নিজে থেকে নাল বসাই নাই। আমরা শুধু নাল বসানোর জন্য জায়গা রেখে দিয়েছি।

স্ট্রিং ডিক্লেয়ার করার সময় স্ট্রিং এর একচুয়াল সাইজ থেকে ১ বেশি ডিক্লেয়ার করতে হয়, কারন প্রতিটি স্ট্রিং এর শেষে নাল ক্যারেক্টার বসে।

Last updated