今天作业之一是自己编写函数,实现strlen()函数;
发现了一些错误
这是第一遍写的错误代码
int mystrlen(char *ch)
{
int i =0;
while(*ch != '\0')
{
ch++;
i++;
}
return i-1;
}
错就错在 i-1上了
其实指针是从第一个字符开始的,而i=0,则并不代表第一个字符,指针换到第二个字符时,i的值才为1,指针判断到'\0',也就是第长度+1个字符时i的值也应该对应是字符串长度,不用再减一了。
int mystrlen(char *ch)
{
int i =0;
while(*(ch+i) !=0)
{
i++;
}
return i;
}
这样写逻辑应该能清楚点,真两段是等价的,最后得到的*(ch+i)等价于ch【i】,这个地方存的'\0',那么想想也知道字符串的长度就是i,因为数组最后一个元素的序号等于其长度减去1,也就是ch[i],i为包括\0在内的总长度减一,那i的值不刚刚好为字符串长度