strlen() is used to get the length of a string stored in an array.
sizeof() is used to get the actual size of any type of data in bytes.
Besides, 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() is a function that takes a pointer to a character, and walks the memory from this character on, looking for a null character. It counts the number of characters before it finds the null character. In other words, it gives you the length of a C-style null-terminated string.
The two are quite different. In C++, you do not need either very much, strlen() is for C-style strings, which should be replaced by C++-style std::strings, whereas the primary application for sizeof() in C is as an argument to functions like malloc(), memcpy() or memset(), all of which you shouldn't use in C++ (use new, std::copy(), and std::fill() or constructors).
strlen() is used to get the length of a string stored in an array.
sizeof() is used to get the actual size of any type of data in bytes.
Besides, 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() is a function that takes a pointer to a character, and walks the memory from this character on, looking for a null character. It counts the number of characters before it finds the null character. In other words, it gives you the length of a C-style null-terminated string.
The two are quite different. In C++, you do not need either very much, strlen() is for C-style strings, which should be replaced by C++-style std::strings, whereas the primary application for sizeof() in C is as an argument to functions like malloc(), memcpy() or memset(), all of which you shouldn't use in C++ (use new, std::copy(), and std::fill() or constructors).
sizeof is not a method. It is a compile-time construct that determines the amount of memory a particular type or a variable occupies. strlen, on the other hand, is a function that counts the number of consecutive non-zero char values starting at the specified location in memory (which happens to be the same as determining the length of a zero-terminated C string).
sizeof VS. strlen
sizeof a string
sizeof( <string literal> ) - Post.Byes - Bytes
Understanding `sizeof` return values on `Char` / `String`
Videos
#include<stdio.h>
#include<string.h>
main()
{
char str[10] = "clue";
strcpy(str, "no ");
strcat(str, "more");
printf("%d", sizeof(str) - strlen(str));
}In the following code, I expected the output to be 1, since if I'm not wrong, the length of str changes twice after it's initialized, and in the end I have ''no more'' string, strlen for which is 7 and sizeof for which is 8, since \0 is also included in the count. I get 3 for some reason though.
I know you can do this:
const char str[] = "string"; size_t len = sizeof(str);
but if I had multiple strings in an array, how would I use sizeof on one of the strings:
const char *strarray[] = {"string1", "string2", "string3"};
sizeof(strarray); //this equals size of all pointers
sizeof(strarray[0]); //this equals pointer size
sizeof(*strarray[0]); //this equals char sizeIs this possible in C or do I have to use strnlen?
As "abcd" is compile-time known array of type char[5] and it is written directly into source code, you could just use:
sizeof("abcd")
Notice, that:
sizeof("abcd") == strlen("abcd") + 1
as the former includes terminating NUL character.
Iterate over a[0] untill \0 is found.
i.e. a[0][0], a[0][1], a[0][2], ....
But, as people say, what is the need to re-invent the wheel. It is better to use strlen().