Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

String Library Functions ในภาษา C (string.h)

ฟังก์ชันสตริงมาตรฐานใน <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()ค้นหา Substringchar * (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() แทน