strlen
trả về số ký tự đứng trước ký tự null kết thúc. An thực hiện strlen
có thể trông như thế này:Strlen có phải là một chuỗi với các giá trị chưa được khởi tạo không xác định hành vi không?
size_t strlen(const char * str)
{
const char *s;
for (s = str; *s; ++s) {}
return(s - str);
}
thực hiện đặc biệt này dereferences s
, nơi s
có thể chứa các giá trị không xác định. Nó tương đương với điều này:
int a;
int* p = &a;
*p;
Vì vậy, ví dụ nếu ai đó để làm điều này (gây strlen
để đưa ra một sản lượng không chính xác):
char buffer[10];
buffer[9] = '\0';
strlen(buffer);
Có hành vi undefined?
@ user2864740 bạn có chắc chắn rằng chuỗi * phải * chứa một số giá trị không? Không phải C cho phép vui vẻ rơi vào một đọc-trước-viết? – kay