Sizeof operator is a compile time unary operator which can be used to compute the size of its operand.
- The result of sizeof is of unsigned integral type which is usually denoted by size_t.
- sizeof can be applied to any data-type, including primitive types such as integer and floating-point types, pointer types, or compound datatypes such as Structure, union etc.
strlen() is a predefined function in C whose definition is contained in the header file “string.h”.
- strlen() accepts a pointer to an array as argument and walks through memory at run time from the address we give it looking for a NULL character and counts up how many memory locations it passed before it finds one.
- The main task of strlen() is to count the length of an array or string.
sizeof vs strlen()
- Type: Sizeof operator is a unary operator whereas strlen() is a predefined function in C
- Data types supported: Sizeof gives actual size of any type of data (allocated) in bytes (including the null values) whereas get the length of an array of chars/string.
Evaluation size: sizeof() is a compile-time expression giving you the size of a type or a variable’s type. It doesn’t care about the value of the variable.
Strlen on the other hand, gives you the length of a C-style NULL-terminated string.
- Summary: The two are almost different concepts and used for different purposes.
In context of C++: In C++, you do not need any of them as such.
strlen() in C-style strings can be replaced by C++ std::strings.
sizeof() in C is as an argument to functions like malloc(), memcpy() or memset() can be replaced by C++ (use new, std::copy(), and std::fill() or constructors).
Length of String is 8 Size of String is 9
Since size of char in C is 1 byte but then also we find that strlen() gave one less value than sizeof().
Explanation : We know, that every string terminates with a NULL character (“\0”).
strlen() searches for that NULL character and counts the number of memory address passed, So it actually counts the number of elements present in the string before the NULL character, here which is 8.
sizeof() operator returns actual amount of memory allocated for the operand passed to it. Here the operand is an array of characters which contains 9 characters including Null character and size of 1 character is 1 byte. So, here the total size is 9 bytes.
Try to guess the output of following program:
The strlen function looks for a null character and behaves abnormally if it doesn’t find it.
sizeof(a) = 10 strlen(a) = 9 sizeof(b) = 9 strlen(b) = 11
This article is contributed by Aditya Kumar. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to firstname.lastname@example.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.
- Difference between sizeof(int *) and sizeof(int) in C/C++
- Is sizeof for a struct equal to the sum of sizeof of each member?
- Write your own strlen() for a long string padded with '\0's
- strlen() function in c
- Implement Your Own sizeof
- Operands for sizeof operator
- Do not use sizeof for array parameters
- How to find size of array in C/C++ without using sizeof ?
- sizeof() for Floating Constant in C
- sizeof operator in C
- Anything written in sizeof() is never executed in C
- Why does sizeof(x++) not increment x in C?
- Difference between Relational operator(==) and std::string::compare() in C++
- Difference between String and Character array in Java
- Difference between Array and String in Java
- Difference and Similarities between PHP and C
- Difference between Stop and Wait protocol and Sliding Window protocol
- Similarities and Difference between Java and C++
- Difference between Yaacomo and and XAP
- Difference between VoIP and and POTS
Improved By : abhikulshrestha1