ฟังก์ชันสตริงมาตรฐานใน <string.h> สำหรับจัดการสตริงอย่างมีประสิทธิภาพ
รายการฟังก์ชันหลัก
| ฟังก์ชัน | คำอธิบาย | Return |
|---|---|---|
| strlen() | ความยาวสตริง (ไม่นับ \0) | size_t |
| strcpy() | คัดลอกสตริง (Source → Dest) | char * (dest) |
| strncpy() | คัดลอก n ตัวอักษร | char * (dest) |
| strcat() | ต่อสตริง (Dest + Src) | char * (dest) |
| strncat() | ต่อสตริง n ตัวอักษร | char * (dest) |
| strcmp() | เปรียบเทียบสตริง 2 ตัว | int (<0, 0, >0) |
| strncmp() | เปรียบเทียบ n ตัวแรก | int |
| strrev() | กลับสตริง (Non-standard) | char * |
| strstr() | ค้นหา Substring | char * (ptr) / NULL |
รายละเอียดแต่ละฟังก์ชัน
strlen() - ความยาวสตริง
size_t strlen(const char *str);
char s[] = "Hello";
printf("%zu\n", strlen(s)); // 5
strcpy() - คัดลอกสตริง
char *strcpy(char *dest, const char *src);
คำเตือน: Dest ต้องมีขนาดพอรับ Src + \0 มิฉะกัน Buffer Overflow
char src[] = "Hello";
char dest[20];
strcpy(dest, src); // dest = "Hello"
strncpy() - คัดลอก n ตัวอักษร
char *strncpy(char *dest, const char *src, size_t n);
ไม่เติม \0 อัตโนมัติถ้า src ยาวกว่า n → ต้องเติมเอง
char src[] = "Hello World";
char dest[10];
strncpy(dest, src, 5);
dest[5] = '\0'; // สำคัญ!
// dest = "Hello"
strcat() - ต่อสตริง
char *strcat(char *dest, const char *src);
ต่อ src ไปท้าย dest (dest ต้องมีพื้นที่พอ)
char a[50] = "Hello";
char b[] = " World";
strcat(a, b); // a = "Hello World"
strcmp() - เปรียบเทียบสตริง
int strcmp(const char *s1, const char *s2);
- Return < 0: s1 < s2 (Lexicographically)
- Return = 0: s1 == s2
- Return > 0: s1 > s2
strcmp("apple", "ball") // < 0
strcmp("hello", "hello") // 0
strcmp("zoo", "apple") // > 0
strstr() - ค้นหา Substring
char *strstr(const char *haystack, const char *needle);
คืน Pointer ไปยังจุดแรกที่พบ, หรือ NULL ถ้าไม่พบ
char *p = strstr("Hello World", "World");
if(p) printf("Found at index %ld\n", p - "Hello World"); // 6
ตัวอย่างโปรแกรมครบถ้วน
#include <stdio.h>
#include <string.h>
int main() {
char s1[50] = "Hello";
char s2[] = "World";
char s3[50];
printf("Length: %zu\n", strlen(s1));
strcpy(s3, s1);
printf("Copy: %s\n", s3);
strcat(s1, " ");
strcat(s1, s2);
printf("Concat: %s\n", s1);
int cmp = strcmp("apple", "banana");
printf("Compare: %d\n", cmp);
char *found = strstr(s1, "World");
if(found) printf("Found 'World' at position %ld\n", found - s1);
return 0;
}
ผลลัพธ์
Length: 5 Copy: Hello Concat: Hello World Compare: -1 Found 'World' at position 6
ข้อควรระวัง (Security)
- ใช้ strncpy, strncat, snprintf แทน strcpy, strcat, sprintf เพื่อป้องกัน Buffer Overflow
- ตรวจสอบขนาด Buffer ก่อนคัดลอก/ต่อสตริง
gets()ถูก Deprecated/Removed (Unsafe) → ใช้fgets()แทน