1. บทนำ
การเปรียบเทียบสตริงในภาษา C มีความสำคัญอย่างยิ่งต่อการทำงานของโปรแกรมและการจัดระเบียบข้อมูล ตัวอย่างเช่น การเปรียบเทียบสตริงที่ผู้ใช้ป้อนกับข้อมูลที่มีอยู่ หรือใช้ในการจัดเรียงข้อมูล ในบทความนี้จะอธิบายวิธีการเปรียบเทียบสตริงในภาษา C อย่างละเอียด พร้อมวิธีใช้ฟังก์ชันและตัวอย่างจริง
2. ฟังก์ชันที่ใช้ในการเปรียบเทียบสตริง
2.1 ฟังก์ชัน strcmp()
ฟังก์ชัน strcmp()
ใช้สำหรับเปรียบเทียบสตริง 2 ชุด โดยจะคืนค่าตัวเลขจำนวนเต็มเป็นผลลัพธ์ หากสตริงทั้งสองเหมือนกันจะคืนค่า 0 ถ้าสตริงแรกมีลำดับน้อยกว่าจะได้ค่าติดลบ หากมากกว่าจะได้ค่าบวก การใช้ strcmp()
จำเป็นต้อง include ไลบรารี string.h
2.2 ฟังก์ชัน strncmp()
ฟังก์ชัน strncmp()
คล้ายกับ strcmp()
แต่สามารถระบุจำนวนอักขระที่ต้องการเปรียบเทียบได้ เช่น ต้องการเปรียบเทียบเฉพาะ 3 ตัวแรกของสตริง ฟังก์ชันนี้ช่วยป้องกัน buffer overflow จึงปลอดภัยในด้านความปลอดภัยมากกว่า การใช้งานต้อง include ไลบรารี string.h
เช่นกัน
3. ตัวอย่างการเปรียบเทียบสตริง
3.1 ตัวอย่าง strcmp()
ตัวอย่างการใช้ strcmp()
เปรียบเทียบสตริงมีดังนี้
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "apple";
char str2[] = "orange";
int result = strcmp(str1, str2);
if (result == 0) {
printf("The strings are equal.n");
} else if (result < 0) {
printf("str1 is less than str2.n");
} else {
printf("str1 is greater than str2.n");
}
return 0;
}
โปรแกรมนี้ใช้ strcmp()
เพื่อเปรียบเทียบ str1
และ str2
แล้วแสดงผลตามค่าที่ได้
3.2 ตัวอย่าง strncmp()
ต่อไปนี้คือตัวอย่างการใช้ strncmp()
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "apple";
char str2[] = "application";
int result = strncmp(str1, str2, 3);
if (result == 0) {
printf("The first 3 characters are equal.n");
} else if (result < 0) {
printf("str1 is less than str2 in the first 3 characters.n");
} else {
printf("str1 is greater than str2 in the first 3 characters.n");
}
return 0;
}
โปรแกรมนี้เปรียบเทียบเฉพาะ 3 ตัวอักษรแรกของ str1
และ str2
ด้วย strncmp()
4. การจัดการข้อผิดพลาดและความปลอดภัย
4.1 การจัดการข้อผิดพลาด (Error Handling)
ขณะเปรียบเทียบสตริงควรระวังอย่าเปรียบเทียบกับ NULL pointer การส่ง NULL pointer ให้กับ strcmp()
หรือ strncmp()
อาจทำให้โปรแกรมแครช ควรตรวจสอบก่อนว่า pointer ไม่ใช่ NULL เพื่อป้องกันปัญหานี้
4.2 การป้องกัน buffer overflow
strncmp()
ถูกใช้เพื่อป้องกัน buffer overflow เพราะจะเปรียบเทียบเฉพาะจำนวนตัวอักษรที่กำหนด แม้จะเปรียบเทียบกับสตริงขนาดใหญ่ก็ยังปลอดภัย เหมาะสำหรับกรณีที่ต้องจัดการข้อมูลที่รับจากภายนอก
5. สรุป
ในการเปรียบเทียบสตริงในภาษา C นิยมใช้ฟังก์ชัน strcmp()
และ strncmp()
ซึ่งแต่ละแบบมีจุดเด่นและการใช้งานที่เหมาะสมต่างกัน หากเน้นความปลอดภัยแนะนำให้ใช้ strncmp()
บทความนี้หวังว่าจะช่วยให้คุณเข้าใจการใช้งานและการจัดการข้อผิดพลาดสำหรับการเปรียบเทียบสตริง สามารถนำไปพัฒนาโปรแกรมให้แข็งแรงยิ่งขึ้น
6. คำถามที่พบบ่อย (FAQ)
6.1 ความแตกต่างระหว่าง strcmp()
กับ strncmp()
คืออะไร?
strcmp()
จะเปรียบเทียบสตริงทั้งชุด ส่วน strncmp()
จะเปรียบเทียบเฉพาะจำนวนตัวอักษรที่ระบุ strncmp()
มักใช้เพื่อป้องกัน buffer overflow
6.2 หากผลลัพธ์จาก strcmp()
ไม่เท่ากับ 0 ควรทำอย่างไร?
ถ้าผลลัพธ์เป็นค่าติดลบ หมายถึงสตริงแรกมีลำดับน้อยกว่า ถ้าเป็นค่าบวกหมายถึงมากกว่า ควรเขียนโปรแกรมให้จัดการตามเงื่อนไขที่ต้องการ
6.3 ข้อควรระวังเมื่อเปรียบเทียบสตริงที่อาจเป็น NULL pointer คืออะไร?
หากส่ง NULL pointer ไปยัง strcmp()
หรือ strncmp()
อาจทำให้โปรแกรมแครช ดังนั้นควรตรวจสอบก่อนทุกครั้งว่า pointer ไม่ใช่ NULL ก่อนเปรียบเทียบ