在MSDN上查到了strlen()函数的定义:

size_t strlen( const char *string );

<string.h>

Get the length of a string.

意为处于头文件<string.h>里的检测字符串长度的一个函数,且括号里为常变量指针。

在引用strlen()的原型函数如下:

#include<stdio.h>

#include<string.h>

void reserve_string(char* arr)//写成char arr[]也行;

{

int left = 0;

int right = strlen(arr) - 1;

while (left < right)

{

 int tmp = arr[left];

 arr[left] = arr[right];

 arr[right] = tmp;

 left++;

 right--;

}

}

int main()

{

char arr[] = "abcdefg";

reserve_string(arr);

printf("%s\n", arr);

return 0;

}


在不引用头文件的情况下我有一下三种写法能够模拟实现:

一、计数器实现

#include<stdio.h>

int my_strlen(char arr[])//char* arr也行;

{

int count=0;

while(*arr)

{

arr++;

count++;

}

return count;

}

int main()

{

char arr[]="abcdef";

int ret=0;

ret=my_strlen(arr);

printf("%d\n",ret);

return 0;

}

二、递归实现

​#include<stdio.h>

int my_strlen(const char* str)​//不希望str的值被改变,加一个const;

{

if(*str!='\0')

{

return 1+my_strlen(str+1);

}

else

{

return 0;

}

}

int main()

{

char arr[]="abcdef";

printf("%d\n", my_strlen(arr));

return 0;

}


三、指针减指针

​#include<stdio.h>

int my_strlen(const char* arr)

{

char* dak=arr;//将元素首元素地址存起来(指针初始位置);

assert(arr!=NULL);//保证指针的有效性;

while(*arr)

{

arr++;

}

return arr-dak;

}

int main()

{

char arr[]="abcdef";

int ret=0;

ret=my_strlen(arr);

printf("%d\n",ret);

return 0;

}