วิธีตรวจสอบค่า Null ใน C: 7 ขั้นตอน (พร้อมรูปภาพ)

สารบัญ:

วิธีตรวจสอบค่า Null ใน C: 7 ขั้นตอน (พร้อมรูปภาพ)
วิธีตรวจสอบค่า Null ใน C: 7 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: วิธีตรวจสอบค่า Null ใน C: 7 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: วิธีตรวจสอบค่า Null ใน C: 7 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: Gimp: Course For Beginners 8: Scale or Resize an Image 2024, อาจ
Anonim

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

ขั้นตอน

ส่วนที่ 1 จาก 2: การตรวจสอบค่าว่าง

ตรวจสอบ Null ใน C ขั้นตอนที่ 1
ตรวจสอบ Null ใน C ขั้นตอนที่ 1

ขั้นตอนที่ 1 ใช้รหัสตรวจสอบค่าว่างมาตรฐาน

ต่อไปนี้เป็นวิธีที่ชัดเจนที่สุดในการเขียนเช็คว่าง เราจะใช้ ptr ในบทความนี้เป็นชื่อของตัวชี้ที่คุณกำลังตรวจสอบ

  • ถ้า(ptr == NULL)

    {

    // รหัสถ้าตัวชี้เป็น NULL

    } อื่น {

    // รหัสถ้าไม่ใช่ NULL

    }

ตรวจสอบ Null ใน C ขั้นตอนที่ 2
ตรวจสอบ Null ใน C ขั้นตอนที่ 2

ขั้นตอนที่ 2 ทดสอบค่าใดๆ ยกเว้น NULL

บางครั้งก็สะดวกกว่าที่จะทดสอบความไม่เท่าเทียมกันแทน ไม่น่าแปลกใจที่นี่:

  • ถ้า (ptr != NULL) {

    // รหัสถ้าไม่ใช่ NULL

    }

ตรวจสอบ Null ใน C ขั้นตอนที่ 3
ตรวจสอบ Null ใน C ขั้นตอนที่ 3

ขั้นตอนที่ 3 เขียน NULL ก่อนเพื่อหลีกเลี่ยงข้อผิดพลาด (ตัวเลือก)

ข้อเสียเปรียบหลักของวิธี PTR == NULL คือโอกาสที่คุณจะพิมพ์ ptr = NULL แทนโดยไม่ได้ตั้งใจ โดยกำหนดค่า NULL ให้กับตัวชี้นั้น นี้อาจทำให้เกิดอาการปวดหัวที่สำคัญ เนื่องจากการทดสอบความเท่าเทียมกัน (เป็น) ถือว่าตัวถูกดำเนินการแบบสมมาตร คุณจะได้ผลลัพธ์ที่เหมือนกันทุกประการโดยการเขียน ถ้า (NULL == ptr) แทนที่. สิ่งนี้ป้องกันการพิมพ์ผิดมากกว่า เนื่องจาก NULL = ptr โดยไม่ได้ตั้งใจทำให้เกิดข้อผิดพลาดในการคอมไพล์อย่างง่าย

โปรแกรมเมอร์บางคนดูอึดอัดเล็กน้อย แต่ก็ใช้ได้จริง วิธีที่คุณใช้ขึ้นอยู่กับความชอบส่วนบุคคล และคอมไพเลอร์ของคุณตรวจจับข้อผิดพลาด if (ptr = NULL) ได้ดีเพียงใด

ตรวจสอบ Null ใน C ขั้นตอนที่ 4
ตรวจสอบ Null ใน C ขั้นตอนที่ 4

ขั้นตอนที่ 4 ทดสอบว่าตัวแปรเป็นจริงหรือไม่

ง่ายๆ ถ้า (ptr) ทดสอบว่า ptr เป็น TRUE หรือไม่ มันจะคืนค่า FALSE ถ้า ptr เป็น NULL หรือถ้า ptr เป็น 0 ความแตกต่างนั้นไม่สำคัญในหลายกรณี แต่โปรดทราบว่าสิ่งเหล่านี้ไม่เหมือนกันในทุกสถาปัตยกรรม

สิ่งที่ตรงกันข้ามคือ ถ้า (!ptr) ซึ่งจะคืนค่า TRUE หาก ptr เป็น FALSE

ส่วนที่ 2 จาก 2: การหลีกเลี่ยงข้อผิดพลาด

ตรวจสอบ Null ใน C ขั้นตอนที่ 5
ตรวจสอบ Null ใน C ขั้นตอนที่ 5

ขั้นตอนที่ 1 ตั้งค่าตัวชี้ก่อนตรวจสอบค่า NULL

ข้อผิดพลาดทั่วไปประการหนึ่งคือการสมมติว่าตัวชี้ที่สร้างขึ้นใหม่มีค่า NULL นี่ไม่เป็นความจริง. ตัวชี้ที่ไม่ได้กำหนดจะยังชี้ไปยังที่อยู่หน่วยความจำ ไม่ใช่ที่อยู่ที่คุณระบุ เป็นเรื่องปกติในการตั้งค่าพอยน์เตอร์ที่สร้างขึ้นใหม่หรือตัวชี้อิสระเป็น NULL เพื่อให้แน่ใจว่าคุณไม่ได้ใช้ที่อยู่ที่ไม่ช่วยเหลือนี้โดยบังเอิญ

  • หลีกเลี่ยงข้อผิดพลาดนี้:

    ถ่าน *ptr;

    ถ้า(ptr == NULL)

    {

    //สิ่งนี้จะส่งกลับ FALSE ตัวชี้ได้รับการกำหนดค่าที่ถูกต้อง

    }

  • แทนที่จะเขียนว่า:

    ถ่าน *ptr = NULL; //สิ่งนี้กำหนดพอยน์เตอร์ให้กับ NULL

    ถ้า(ptr == NULL)

    {

    // ค่านี้จะคืนค่า TRUE หากยังไม่ได้กำหนดตัวชี้ใหม่

    }

ตรวจสอบ Null ใน C ขั้นตอนที่ 6
ตรวจสอบ Null ใน C ขั้นตอนที่ 6

ขั้นตอนที่ 2 ให้ความสนใจกับฟังก์ชันที่สามารถคืนค่า NULL ได้

หากฟังก์ชันสามารถคืนค่า NULL ได้ ให้พิจารณาว่านี่เป็นไปได้หรือไม่ และนั่นจะทำให้เกิดปัญหาในภายหลังในโค้ดของคุณหรือไม่ นี่คือตัวอย่างของฟังก์ชัน malloc โดยใช้การตรวจสอบค่าว่าง (ถ้า (ptr)) เพื่อให้แน่ใจว่าจัดการเฉพาะพอยน์เตอร์ที่มีค่าที่ถูกต้อง:

  • int *ptr = malloc(N * sizeof(int));

    ถ้า (ptr) {

    int ฉัน;

    สำหรับ (i = 0; i < N; ++i)

    ptr = ผม;

    }

ตรวจสอบ Null ใน C ขั้นตอนที่7
ตรวจสอบ Null ใน C ขั้นตอนที่7

ขั้นตอนที่ 3 เข้าใจว่า NULL เป็น 0 แต่คุณควรใช้ NULL แทน 0 เสมอเมื่อทำงานกับพอยน์เตอร์เพื่อความชัดเจน

ในอดีต C แทนค่า NULL เป็นตัวเลข 0 (นั่นคือ 0x00) ทุกวันนี้อาจซับซ้อนขึ้นเล็กน้อยและแตกต่างกันไปตามระบบปฏิบัติการ โดยปกติคุณสามารถตรวจสอบ NULL ได้โดยใช้ ptr == 0 แต่มีบางกรณีที่อาจทำให้เกิดปัญหาได้ บางทีที่สำคัญกว่านั้น การใช้ NULL ทำให้ชัดเจนว่าคุณกำลังทำงานกับพอยน์เตอร์สำหรับผู้อื่นที่อ่านโค้ดของคุณ

เคล็ดลับ

คุณสามารถใช้การเช็คอินนี้ในขณะที่วนซ้ำได้เหมือนกับวิธีอื่นๆ: ในขณะที่ (NULL == ptr) {

แนะนำ: