6个回答
展开全部
*p是char(字符型)指针变量
先将*p的地址*(字符串的第一个字符)赋给s,然后执行while循环,*p所指地址改变为最后一个字符的地址,p-s就是*p最后的地址减去最初的地址,得到的就是字符串的长度了。
逐字解释下你的程序
#include <studio.h>
#include <string.h> 这个程序包含了2个头文件 studio 和string
int test strlen(char *s) 这是一个等待调用的子程序 程序名为 strlen 调用的时候,给入与
括号里的相同类型变量
{char *p=s; 定义字符串变量 p 并把其地址的第一个给指针 s
while (*p) 当指针没有指到最后一位时
p++; 字符串向后移动一位
return p-s; 返回值为字符串的最后一位的地址(电脑中的物理地址)减去第一位的
地址
}
关于字符串在电脑中的存放的物理地址,一般是指针指向字符串的第一个物理地址,当调用的时候会依次取用
如字符串”angngongbi”
对应的逻辑地址 物理地址(假设的)
a 0 oE0FHI2
n 1 0G3FTE2
g 2 .......
n 3 .......
g 4 .......
o 5 .......
n 6 .......
g 7 .......
b 8 .......
i 9 .......
先将*p的地址*(字符串的第一个字符)赋给s,然后执行while循环,*p所指地址改变为最后一个字符的地址,p-s就是*p最后的地址减去最初的地址,得到的就是字符串的长度了。
逐字解释下你的程序
#include <studio.h>
#include <string.h> 这个程序包含了2个头文件 studio 和string
int test strlen(char *s) 这是一个等待调用的子程序 程序名为 strlen 调用的时候,给入与
括号里的相同类型变量
{char *p=s; 定义字符串变量 p 并把其地址的第一个给指针 s
while (*p) 当指针没有指到最后一位时
p++; 字符串向后移动一位
return p-s; 返回值为字符串的最后一位的地址(电脑中的物理地址)减去第一位的
地址
}
关于字符串在电脑中的存放的物理地址,一般是指针指向字符串的第一个物理地址,当调用的时候会依次取用
如字符串”angngongbi”
对应的逻辑地址 物理地址(假设的)
a 0 oE0FHI2
n 1 0G3FTE2
g 2 .......
n 3 .......
g 4 .......
o 5 .......
n 6 .......
g 7 .......
b 8 .......
i 9 .......
参考资料: 百度一下
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
其实strlen是现成计算字符串长度的函数,当我们需要是就直接调用就ok了,不然的话,你要自己去实现计算字符串长度的代码。
利用时库函数写代码是为了提高工作的效率,c语言上机字符串一类的问题为什么有时用strlen函数但有时却不用这个完全是看编写程序的人而决定的。
利用时库函数写代码是为了提高工作的效率,c语言上机字符串一类的问题为什么有时用strlen函数但有时却不用这个完全是看编写程序的人而决定的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
strlen 最大的作用是防止你做内存拷贝时 越界,因为每个字符串申请的空间不同,以字符串实际长度拷贝可防止读值越界
可以参考strncpy memcpy strncmp 看下第三个长度参数的作用,sizeof是判断类型的大小并不关心实际值的长度,用处不一样
可以参考strncpy memcpy strncmp 看下第三个长度参数的作用,sizeof是判断类型的大小并不关心实际值的长度,用处不一样
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
strlen() 返回的是字符串的实际长度,而有时候我们要求的是所声明字符串变量所占的内存大小,这两者是不同的;
例如:
char str[20]="kkk";
str[]数组占存20字节,而strlen(str)是3;
例如:
char str[20]="kkk";
str[]数组占存20字节,而strlen(str)是3;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
当你想知道字符串的长度时,就用strlen函数!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询