ความหมาย
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";