![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
帮我看看这个求一个字符串长度的小程序,编译时没有错误,但是无法正常运行。求高人帮看看
main()
{
char *p1="i am the best";
char *p2="you are the best";
int n1,n2;
n1=strlen(p1);
printf("n1=%d\n",n1);
n2=strlen(p2);
printf("n2=%d\n",n2);
}
strlen(s)
char *s;
{
char *q=s;/*这地方,你能不能给我详细介绍一下啊!我个人认为那个s是数组地址的起始值,怎么赋给*q了,希望能给详细解释一下,菜鸟杰问*/
while(*q!='\n')
q++;
return (q-s);
} 展开
给改成了这样:
#include<stdio.h>
main()
{
char *p1="i am the best";
char *p2="you are the best";
int n1,n2;
n1=strlen1(p1);
printf("n1=%d\n",n1);
n2=strlen1(p2);
printf("n2=%d\n",n2);
}
int strlen1(char *s)//我把这个函数名改了是因为避免它和库里的strlen()函数重了导致异常
{
char *q=s;
while(*q!='\0') //这个地方的结束条件应该是'\0'而不是‘\n' ’\0'是空字符而'\n'是换行符
q++;
return (q-s);
}
解释一下 char *q=s:
参数是char *s 接收一个char型指针,指向一段地址,也可以理解为指向一段数组
char *q=s这句话,同样定义了一个char型指针,此时,可以理解为将s数组的首地址赋给了q,其实是,s指针和q指针同时指向了同一个地址,s没有变,只不过q这个时候也指向了s原来指向的那个首地址,如果对应主函数的话,就是p1[0]和p2[0]。
因为此时q和s指向了同一地址,q++就是不断将指针后移的过程,因此可以据此得出字符串长度……