1. บทนำ
ในภาษา C สตริงจะถูกจัดการเป็นเพียงแค่อาร์เรย์ของอักขระ ด้วยคุณสมบัตินี้จึงต้องมีการจัดการที่แตกต่างจากภาษาอื่น โดยเฉพาะอย่างยิ่งในการกำหนดค่าและการกำหนดค่าเริ่มต้นของสตริง จำเป็นต้องมีการใช้ตัวอักษรนัล (
) เพื่อสิ้นสุดสตริงเสมอ บทความนี้จะอธิบายรายละเอียดเกี่ยวกับหัวข้อ “การกำหนดค่าให้สตริงในภาษา C” ตั้งแต่การประกาศขั้นพื้นฐานไปจนถึงวิธีการกำหนดค่าและการจัดการ พร้อมทั้งครอบคลุมข้อควรระวังเพื่อคงความเสถียรของโปรแกรม
2. การประกาศและการกำหนดค่าเริ่มต้นของสตริง
ในภาษา C การประกาศสตริงจะทำผ่านอาร์เรย์ของอักขระ ด้านล่างเป็นตัวอย่างของการประกาศและกำหนดค่าเริ่มต้น
การประกาศและกำหนดค่าเริ่มต้นโดยใช้อาร์เรย์
สตริงสามารถประกาศและกำหนดค่าเริ่มต้นได้ดังนี้
char greeting[] = "Hello";
ในตัวอย่างข้างต้น สตริง greeting
ถูกกำหนดค่าเริ่มต้นเป็น “Hello” และจะมีการเพิ่มตัวอักษรนัล (
) โดยอัตโนมัติ ในภาษา C คุณสามารถใช้เครื่องหมาย =
เพื่อกำหนดค่าเริ่มต้นขณะประกาศอาร์เรย์ได้ โดยทั่วไปจะละการระบุขนาด
การเพิ่มตัวอักษรนัล
หากต้องการกำหนดค่าเริ่มต้นให้สตริงด้วยอักขระทีละตัว จำเป็นต้องเพิ่มตัวอักษรนัลด้วยตนเอง เช่น
char greeting[6] = {'H', 'e', 'l', 'l', 'o', ' '};
หากไม่มีตัวอักษรนัล ฟังก์ชันจัดการสตริงในภาษา C จะทำงานไม่ถูกต้องและอาจอ่านข้อมูลเกินขอบเขตของหน่วยความจำ ส่งผลให้เกิดพฤติกรรมที่ไม่คาดคิด

3. วิธีการกำหนดค่าให้สตริง
ในภาษา C ไม่สามารถกำหนดค่าสตริงโดยตรงได้ หากต้องการคัดลอกเนื้อหาของสตริงไปยังตัวแปรอื่น ต้องใช้ฟังก์ชัน strcpy
การใช้งานพื้นฐานของฟังก์ชัน strcpy
strcpy
เป็นฟังก์ชันที่อยู่ในไลบรารีมาตรฐาน <string.h>
และสามารถใช้งานได้ดังนี้
#include <stdio.h>
#include <string.h>
int main() {
char source[] = "Hello";
char destination[10];
strcpy(destination, source);
printf("สตริงที่ถูกคัดลอก: %s\n", destination);
return 0;
}
ในโค้ดนี้ เนื้อหาของ source
จะถูกคัดลอกไปยัง destination
และ destination
จะมีค่าเป็น “Hello” เนื่องจาก strcpy
ไม่ตรวจสอบขนาดของอาร์เรย์ จึงต้องระวังไม่ให้เกิดการเกินขนาด (buffer overflow)
4. การจัดการสตริง
ภาษา C มีฟังก์ชันที่สะดวกหลายตัวสำหรับจัดการสตริง ด้านล่างเป็นตัวอย่างของฟังก์ชันที่ใช้บ่อย เช่น strlen
, strcat
, และ strcmp
การหาความยาวของสตริง: strlen
ใช้ฟังก์ชัน strlen
เพื่อหาความยาวของสตริง ฟังก์ชันนี้จะคืนค่าจำนวนอักขระโดยไม่รวมตัวอักษรนัล
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello";
printf("ความยาวของสตริง: %zu\n", strlen(str));
return 0;
}
การต่อสตริง: strcat
ฟังก์ชัน strcat
จะต่อสตริงหนึ่งเข้ากับอีกสตริงหนึ่ง
#include <stdio.h>
#include <string.h>
int main() {
char greeting[20] = "Hello";
char name[] = " World";
strcat(greeting, name);
printf("สตริงที่ถูกรวม: %s\n", greeting);
return 0;
}
การเปรียบเทียบสตริง: strcmp
ฟังก์ชัน strcmp
จะเปรียบเทียบสตริงสองตัวตามลำดับพจนานุกรม ถ้าเท่ากันจะคืนค่า 0 ถ้าไม่เท่ากันจะคืนค่าเป็นค่าบวกหรือค่าลบ
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "Hello";
char str2[] = "World";
int result = strcmp(str1, str2);
if (result == 0) {
printf("สตริงเหมือนกัน\n");
} else {
printf("สตริงต่างกัน\n");
}
return 0;
}
5. การใช้พอยน์เตอร์กับสตริง
คุณสามารถใช้พอยน์เตอร์เพื่อจัดการสตริงได้ ซึ่งจะทำให้การจัดการหน่วยความจำยืดหยุ่นมากขึ้น แต่ต้องระวังเพราะการใช้งานผิดพลาดอาจทำให้เกิดข้อผิดพลาดหรือโปรแกรมล่ม
การกำหนดค่าสตริงด้วยพอยน์เตอร์
ตัวอย่างการใช้พอยน์เตอร์เพื่อชี้ไปยังสตริงลิตเตอรัล:
#include <stdio.h>
int main() {
char *greeting = "Hello";
printf("%s\n", greeting);
return 0;
}
ในตัวอย่างนี้ พอยน์เตอร์จะชี้ตรงไปยังสตริงลิตเตอรัล แต่ไม่สามารถแก้ไขเนื้อหาของลิตเตอรัลนั้นได้
6. สรุปและข้อควรระวัง
การกำหนดค่าและการจัดการสตริงในภาษา C มีความเสี่ยงต่อข้อผิดพลาดเล็กน้อย เช่น การเกินขนาดบัฟเฟอร์หรือการเข้าถึงพอยน์เตอร์ผิดพลาด ดังนั้นเมื่อใช้ strcpy
หรือ strcat
ควรคำนึงถึงขนาดของอาร์เรย์และจัดสรรบัฟเฟอร์ให้เพียงพอ รวมถึงเมื่อใช้พอยน์เตอร์ ควรใส่ใจเรื่องการจัดการหน่วยความจำและตัวอักษรนัล หากทำตามขั้นตอนที่ถูกต้อง การจัดการสตริงสามารถช่วยให้การประมวลผลข้อมูลมีประสิทธิภาพมากขึ้น