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

ฟังก์ชัน strlen() ในภาษา C

ความหมาย

strlen() คำนวณความยาวของ string (จำนวนตัวอักษร) ไม่นับ null terminator ('\\0')

Prototype

size_t strlen(const char *str);

คืนค่า

จำนวนตัวอักษรใน string (ไม่รวม '\\0') เป็น type size_t (unsigned integer)

ตัวอย่างโปรแกรมที่ 1: ความยาว String Literal

#include <stdio.h>
#include <string.h>
int main() {
    char a[30] = "Hello";
    int len = strlen(a);
    printf("ความยาวของ string = %d\\n", len);
    return 0;
}

ผลลัพธ์

ความยาวของ string = 5

หมายเหตุ: "Hello" มี 5 ตัวอักษร H-e-l-l-o ไม่นับ \\0

ตัวอย่างโปรแกรมที่ 2: เปรียบเทียบการ Initialize แบบต่างๆ

#include <stdio.h>
#include <string.h>
int main() {
    // String literal
    char string1[] = "Welcome To";
    // Character array พร้อม null terminator
    char string2[] = {'T','U','T','O','R','I','A','L','\\0'};
    int str1 = strlen(string1);
    int str2 = strlen(string2);
    printf("string1 ความยาว: %d\\n", str1); // 10
    printf("string2 ความยาว: %d\\n", str2); // 8
    return 0;
}

ผลลัพธ์

string1 ความยาว: 10
string2 ความยาว: 8

รายละเอียดสำคัญ

  • "Welcome To" = W-e-l-c-o-m-e- -T-o = 10 ตัวอักษร (space นับด้วย)
  • {'T','U','T','O','R','I','A','L','\\0'} = 8 ตัวอักษรก่อน \\0
  • strlen นับจนกว่าจะเจอ \\0 แรก

ประสิทธิภาพ (Performance)

  • strlen วนลูปนับตัวอักษรทุกครั้งที่เรียก -> O(n)
  • หากต้องใช้ความยาวหลายครั้ง ควรเก็บไว้ในตัวแปร
  • สำหรับ string ยาวมาก อาจใช้โครงสร้างข้อมูลที่เก็บความยาวไว้ (เช่น Pascal string)

ข้อผิดพลาดทั่วไป

  • ลืมจัดสรรพื้นที่สำหรับ \\0 -> strlen อ่านเกิน buffer
  • ใช้ strlen ในเงื่อนไข loop ที่แก้ไข string -> เรียกซ้ำหลายครั้งช้า
  • สับสนระหว่าง sizeof(array) และ strlen(string)

ตัวอย่างข้อผิดพลาด

char s[5] = "Hello"; // ผิด! ต้องการ 6 bytes (5 + \\0)
printf("%zu\\n", strlen(s)); // อาจครैชหรือคืนค่าผิด

ถูกต้อง: char s[6] = "Hello"; หรือ char s[] = "Hello";