การเข้าใจความแตกต่างในการ สร้างสตริง ใน C: ด้วยและไม่มีตัวสิ้นสุดที่ตามมา

เมื่อทำงานกับสตริงในภาษา C จำเป็นต้องเข้าใจว่าการเริ่มต้นทำงานอย่างไร คำถามที่พบบ่อยระหว่างนักพัฒนาคือความแตกต่างระหว่างการเริ่มต้นอาร์เรย์ตัวอักษรด้วยตัวสิ้นสุดที่ตามมาที่ชัดเจนกับสตริงว่าง

ในบล็อกโพสต์นี้ เราจะวิเคราะห์วิธีการเฉพาะสองวิธีในการเริ่มต้นสตริงใน C:

char str1[32] = "\0"; 

และ

char str2[32] = ""; 

มาวิเคราะห์ความหมายของแต่ละแบบและเปรียบเทียบกัน

การเริ่มต้นสตริงอธิบาย

การประกาศ

ทั้งสองการประกาศนี้สร้างอาร์เรย์ของตัวอักษรขนาด 32 อย่างไรก็ตาม จะมีค่าตั้งต้นที่แตกต่างกัน

  • char str1[32] = "\0";

    • ในที่นี้ คุณกำลังเริ่มต้นองค์ประกอบแรกของอาร์เรย์เป็นตัวอักษร null (\0) ซึ่งทำให้สตริงเป็นค่าว่างแต่ยังเหลือองค์ประกอบอื่น ๆ ของอาร์เรย์ที่ไม่ได้ถูกเริ่มต้น (หมายความว่าอาจมีค่าขยะอยู่ในนั้น)
  • char str2[32] = "";

    • นี่คือการเริ่มต้นองค์ประกอบแรกเป็นตัวอักษร null (\0) เช่นกัน แต่ยังเริ่มต้นองค์ประกอบอื่น ๆ ของอาร์เรย์เป็น \0 โดยอัตโนมัติเนื่องจากคุณได้ประกาศด้วยสตริงว่าง

ตัวอย่างการใช้งาน

คุณอาจคิดว่าการประกาศทั้งสองนี้เทียบเท่ากันเนื่องจากขนาดของมัน แต่มีความแตกต่างที่สำคัญเมื่อไม่มีการระบุขนาด

พิจารณาโค้ดต่อไปนี้:

char a[] = "a\0"; 
char b[] = "a";
printf("%i %i\n", sizeof(a), sizeof(b));

ผลลัพธ์:

3 2

คำอธิบายของผลลัพธ์

  1. สตริง a:

    • สตริงนี้รวมถึงตัวสิ้นสุดที่เป็น null ชัดเจน ส่งผลให้มีขนาดเป็น 3 ซึ่งประกอบด้วย:
      • ตัวอักษร 'a' (1 ไบต์)
      • ตัวสิ้นสุดที่ชัดเจน (\0) (1 ไบต์)
      • ตัวสิ้นสุดที่เป็น null โดยปริยายที่ท้าย (1 ไบต์)
  2. สตริง b:

    • ในกรณีนี้ สตริงจะมีเพียงตัวอักษร 'a' และตัวสิ้นสุดที่เป็น null โดยปริยาย ซึ่งทำให้มีขนาดเท่ากับ 2

ข้อสรุปที่สำคัญ

  • การเริ่มต้นด้วยตัวสิ้นสุดที่ตามมา:
    เมื่อคุณรวมตัวสิ้นสุด \0 ที่ชัดเจนเข้ามา คุณจะเพิ่มขนาดของสตริงขึ้นอีก 1 ไบต์ มาตรฐาน C จะเพิ่ม \0 อีกตัวที่ท้าย ซึ่งทำให้มีตัวสิ้นสุดรวมทั้งหมดเป็นสองตัว

  • หน่วยความจำและการจัดสรร:
    การทำความเข้าใจว่าภาษา C จัดการหน่วยความจำสำหรับสตริงนั้นสามารถป้องกันข้อผิดพลาดและบั๊กได้ การรู้จักวิธีที่สตริงถูกเริ่มต้นสามารถส่งผลอย่างมากต่อการจัดสรรและการเข้าถึงหน่วยความจำในแอปพลิเคชันของคุณ

  • แนวทางปฏิบัติที่ดีที่สุด:
    ให้เริ่มต้นสตริงของคุณอย่างรอบคอบเสมอ โดยคำนึงถึงจำนวนตัวอักษรและตัวสิ้นสุดที่คุณต้องการรวม

ด้วยความรู้นี้ คุณควรรู้สึกมั่นใจมากขึ้นในการนำทางความละเอียดอ่อนของการเริ่มต้นสตริงใน C ขอให้สนุกกับการเขียนโค้ด!