在准备字符串相关的编程题练手的时候,编程过程中发现了一个小问题
代码一:
char *mystrcpy(char *str, const char* src)
{
if(str == NULL || src == NULL)
return NULL;
char *addres = str;
while(*src != '\0') //[1]
*str++ = *src++;
return addres;
}
代码二:
char *mystrcpy(char *str, const char* src)
{
if(str == NULL || src == NULL)
return NULL;
char *addres = str;
while((*str++ = *src++) != '\0'); //[2]
return addres;
}
这两个都是字符串拷贝函数,两个代码是有微小差异的!
int main()
{
const char *src = "world";
char str[] = "helpo world";
char * p = mystrcpy(str, src);
show(p);
return 0;
}
差异在代码有注释!
while(while((*str++ = *src++) != '\0');
看不懂这行代码,可以先看个简单的好描述的代码
int i = 0;
while(i++ < 10);
printf("%d\n",i);
这个代码输出i为11, i++没有出又括号前i的值是没有加一的,出了右括号i的值才会进行加一操作,可以在ide中或者用gdb调试一下
字符串拷贝函数就是这样,while((*str++ = *src++) != '\0'); 这行代码将'\0' 拷贝给str,出了循环的右括号后str进行加一,循环结束。
++i,则是加加后直接把值赋给i
坚持✊