C语言进阶之旅 拓展(strlen)
Posted 一个正直的男孩
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言进阶之旅 拓展(strlen)相关的知识,希望对你有一定的参考价值。
strlen
- C语言自带库函数
- 作用求字符串长度
- \\0之前的字符个数
英文strlen用出处和详细解释
翻译用处:
方法1
- 计数器法
int MyStrlen(char *str)
{
int count = 0;
while (*str++!='\\0')
{
count++;
}
return count;
}
int main()
{
char arr[] = "hello";
printf("%d", MyStrlen(arr));
return 0;
}
方法2
- 递归求解
int MyStrlen(char* str)
{
if (*str != '\\0')
{
return 1 + MyStrlen(str + 1);
}
else
{
return 0;
}
}
int main()
{
char arr[] = "hello";
printf("%d", MyStrlen(arr));
return 0;
}
方法3
- 指针-指针
- str++,然后需要\\0停止,那么他的地址就是\\0
- 然后减去str1,得到元素个数
- 俩指针必须指向同一块地址才可以
int MyStrlen(char* str)
{
char* str1 = str;//把原来的地址给strl
while (*str!='\\0')
{
str++;
}
return str - str1;//指针-指针得元素个数
}
int main()
{
char arr[] = "hello";
printf("%d", MyStrlen(arr));
return 0;
}
看地址
首元素地址是(16进制最后一位)4,str=9,那么一减就得出了元素个数
优化
- 这里写的const char*str 代表这个指针指向的变量不能改变
- size_t是无符号整数,应为长度不可能是负数严谨
- 假设那传过来是一个空指针assert
#include<assert.h>
size_t MyStrlen(count char* str)
{
assert(str!=NULL)
char* str1 = str;//把原来的地址给strl
while (*str!='\\0')
{
str++;
}
return str - str1;//指针-指针得元素个数
}
int main()
{
char arr[] = "hello";
printf("%d", MyStrlen(arr));
return 0;
}
拓展
const,修改变量,函数数组指针
被const修改后不能修改
这个值不可修改,可能自己犯混改了
assert()断言,
你大致知道那里错了又不确定,就可以进行一个判断,如果是假那么他就会在终端告诉你错误在哪里
以上是关于C语言进阶之旅 拓展(strlen)的主要内容,如果未能解决你的问题,请参考以下文章
我的C语言学习进阶之旅解决 Visual Studio 2019 报错:错误 C4996 ‘fscanf‘: This function or variable may be unsafe.(代码片段
我的C语言学习进阶之旅解决 Visual Studio 2019 报错:错误 C4996 ‘fscanf‘: This function or variable may be unsafe.(代码片段