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

ฟังก์ชัน strlen() ในภาษา C - หาความยาว String


ฟังก์ชัน strlen()

strlen() คืนค่า **จำนวนตัวอักษรใน String** (ไม่นับ Null Terminator \0) อยู่ใน <string.h>

ไวยากรณ์

size_t strlen(const char *str);

ตัวอย่างที่ 1: ใช้ strlen()

#include <stdio.h>
#include <string.h>

int main() {
    char name[25];
    size_t length;
    
    printf("Enter your name: ");
    fgets(name, sizeof(name), stdin);
    name[strcspn(name, "\n")] = '\0'; // ลบ newline
    
    length = strlen(name);
    
    printf("Your name is: %s\n", name);
    printf("Length of string: %zu\n", length);
    
    return 0;
}

ผลลัพธ์:


Enter your name: Tutorialspoint
Your name is: Tutorialspoint
Length of string: 14

ตัวอย่างที่ 2: หาความยาว String ไม่ใช้ strlen()

#include <stdio.h>

int main() {
    char string[50];
    int i = 0;
    
    printf("Enter string: ");
    scanf("%49s", string); // อ่าน 1 คำ (หยุดที่ space)
    
    // นับจนกว่าจะเจอ Null Terminator
    while (string[i] != '\0')
        i++;
    
    printf("Length of string: %d\n", i);
    return 0;
}

ผลลัพธ์:


Enter string: TutorialsPoint
Length of string: 14

ข้อสังเกตสำคัญ

  • strlen() นับ **จำนวนตัวอักษร** ไม่ใช่ขนาด Array
  • Time Complexity: O(n) - ต้องวนลูปจนเจอ \0
  • คืนค่า size_t (Unsigned) ควรใช้ %zu ใน printf
  • sizeof(array) ≠ strlen(string) - sizeof ให้ขนาด Array ทั้งหมด (รวม \0 และพื้นที่ว่าง)

ตัวอย่าง sizeof vs strlen


char str[20] = "Hello";
printf("sizeof: %zu\n", sizeof(str));  // 20 (ขนาด Array)
printf("strlen: %zu\n", strlen(str));   // 5 (ความยาว String)

Best Practice

  • ใช้ strlen() จาก Library (Optimized แล้ว)
  • หลีกเลี่ยงการเรียก strlen() ใน Loop Condition (คำนวณซ้ำทุกรอบ) → เก็บไว้ในตัวแปรก่อน
  • เช็ค NULL Pointer ก่อนเรียกใช้

Bad vs Good


// ❌ Bad: เรียก strlen ทุกรอบ O(n²)
for (int i = 0; i < strlen(s); i++) { ... }

// ✅ Good: คำนวณครั้งเดียว O(n)
size_t len = strlen(s);
for (size_t i = 0; i < len; i++) { ... }