The first: use a counter
size_t my_strlen(const char* str)
{
assert(str);
size_t count = 0;
while (*str)
{
count++;
str++;
}
return count;
}
The second: recursion (without creating temporary variables)
size_t my_strlen(const char* str)
{
assert(str);
if (*str == '\0')
{
return 0;
}
return 1 + my_strlen(str + 1);
}
The third type: pointer - pointer
size_t my_strlen(const char* str)
{
assert(str);
char* ret = (char*)str;
while (*str)
{
str++;
}
return str - ret;
}