2011-12-21 80 views

Trả lời

21

strlen() được sử dụng để nhận được độ dài của một chuỗi ký tự/chuỗi.

sizeof() được sử dụng để nhận được kích thước thực tế của bất kỳ loại dữ liệu nào theo byte.

Bên cạnh đó, sizeof() là biểu thức biên dịch cho bạn kích thước của loại hoặc loại biến. Nó không quan tâm đến giá trị của biến.

strlen() là một hàm lấy con trỏ đến một ký tự và đi bộ nhớ từ ký tự này, tìm kiếm một ký tự NULL. Nó đếm số ký tự trước khi nó tìm thấy ký tự NULL. Nói cách khác, nó cung cấp cho bạn độ dài của một chuỗi chấm dứt kiểu NULL.

Hai thiết bị này gần như khác nhau. Trong C++, bạn không cần hoặc rất nhiều, strlen() là cho các chuỗi kiểu C, nên được thay thế bằng C++ - kiểu std::strings, trong khi ứng dụng chính cho sizeof() trong C là đối số cho các hàm như malloc(), memcpy() hoặc memset(), tất cả những thứ bạn không nên sử dụng trong C++ (sử dụng mới, std::copy()std::fill() hoặc constructors).

+1

+1, nhưng thậm chí sử dụng 'std :: copy' và' std :: fill' bạn phải cung cấp số phần tử của mảng nếu bạn đang sử dụng mảng kiểu C. Điểm không phải là nhiều 'memcpy' /' memset' so với thuật toán STL, nhưng C-mảng/chuỗi so với 'std :: vector' /' std :: mảng'/'std :: string'/các vùng chứa khác. –

+2

"sizeof là biểu thức thời gian biên dịch" - ngoại trừ khi được sử dụng trên VLA trong C99. –

+1

Chỉ cần một nit, nhưng ... có một con trỏ 'NULL' và một" con trỏ null ", nhưng nó là một ký tự nul (hoặc những gì tôi thích: một ký tự' '\ 0''). –

9

sizeof không phải là phương thức . Nó là một cấu trúc biên dịch thời gian xác định số lượng bộ nhớ một loại cụ thể hoặc một biến chiếm. Mặt khác, strlen là một hàm đếm số không liên tiếp char giá trị bắt đầu tại vị trí được chỉ định trong bộ nhớ (tương tự như xác định độ dài của chuỗi C không bị chấm dứt).

Các vấn đề liên quan