কম্পিউটার টিউটোরিয়াল

সি ভাষায় char s[] এবং char *s এর পার্থক্য

সি-তে স্ট্রিং হ্যান্ডল করার দুটি সাধারণ উপায়: char s[] (অ্যারে) এবং char *s (পয়েন্টার)। এই দুটির মেমরি লে-আউট এবং ব্যবহারে বড় পার্থক্য রয়েছে।

মূল পার্থক্য

বিষয়char s[]char *s
টাইপঅ্যারেপয়েন্টার
মেমরি লোকেশন (স্ট্যাক)পুরো স্ট্রিং স্ট্যাকে থাকেপয়েন্টার স্ট্যাকে, কন্টেন্ট কোড সেকশনে (রিড-অনলি)
sizeof(s)স্ট্রিংয়ের টোটাল বাইট (নাল টার্মিনেটর সহ)পয়েন্টার সাইজ (৪ বা ৮ বাইট)
মডিফাই করা যায়?হ্যাঁনা (অনডিফাইনড বিহেভিয়ার / সেগমেন্টেশন ফল্ট)

উদাহরণ ১: char s[] — মডিফাই করা যায়

#include <stdio.h>

int main() {
    char s[] = "Hello World";
    s[6] = 'x'; // পজিশন ৬ (০-বেসড) এ 'W'-কে 'x' করলাম
    printf("%s", s);
    return 0;
}

আউটপুট

Hello xorld

এডিট সফল হয়েছে কারণ অ্যারে স্ট্যাকে রয়েছে এবং রাইটেবল।

উদাহরণ ২: char *s — মডিফাই করা যায় না

#include <stdio.h>

int main() {
    char *s = "Hello World";
    s[6] = 'x'; // পজিশন ৬ এ লেখার চেষ্টা
    printf("%s", s);
    return 0;
}

আউটপুট

Segmentation Fault

স্ট্রিং লিটারেল রিড-অনলি মেমরি সেকশনে (.rodata/.text) থাকে। সেটি লিখতে চাইলে প্রোগ্রাম ক্র্যাশ করে।

সঠিক ব্যবহার

  • char s[] = "Hello"; — যখন স্ট্রিং মডিফাই করতে হবে
  • const char *s = "Hello"; — শুধু পড়ার জন্য (সेफ्टी বাড়াতে const ব্যবহার করুন)
  • char *s = malloc(...); — ডাইনামিক্যালি অ্যালোকেট করা স্ট্রিং (পরে free করতে হবে)
  1. C++-এ পয়েন্টার এবং রেফারেন্স প্যারামিটার পার্থক্য

  2. C# এবং Visual C#-র পার্থক্য

  3. C# এবং .NET-এর পার্থক্য

  4. Go এবং Java-এর পার্থক্য