Jac*_*nor 1 c arrays pointers char
抱歉措辞不好的问题,我想不出更好的名字.
我正在学习C,刚刚转到指针并编写了一个函数strcat(char*s,char*t),它将t添加到s的结尾:
void strcat(char *s, char *t) //add t to the end of s
{
while(*s++) //get to the end of s
;
*s--; //unsure why I need this
while(*s++ = *t++) //copy t to the end of s
;
return;
}
Run Code Online (Sandbox Code Playgroud)
现在我的问题是为什么我需要这条线:
*s--;
Run Code Online (Sandbox Code Playgroud)
当我最初添加它时,我认为直到我完成代码才有意义.
我会认为以下情况属实:
1)第一个循环连续递增,当*s为0(或空字符)时,它继续前进,所以现在*s指向数组的空字符.
2)所以我应该做的就是实现第二个循环.s的原始null字符将被t的第一个字符替换,直到我们得到t的null字符,此时我们退出第二个循环并返回.
很明显我错过了一些东西,因为代码没有它就行不通!!
在第一个循环*s指向超出'\ 0'的一个位置之后但我的问题是为什么?
提前致谢 :)
首先*s评估然后s 递增.
因此,当到达s's 0-terminator时,循环结束,但s仍然会再次增加.
也没有必要这样做:
*s--;
Run Code Online (Sandbox Code Playgroud)
干
--s;
Run Code Online (Sandbox Code Playgroud)
要么
s--;
Run Code Online (Sandbox Code Playgroud)
就足够了.这里没有必要去引用s.
或者干脆做
while (*s)
++s;
Run Code Online (Sandbox Code Playgroud)
完全摆脱了它--s;的需要.