M.O*_*.O. 2 c pointers c-strings
我试图理解一个连接字符串的方法,如"标准C库"中所提出的.
在讨论了如何连接两个字符串s1和s2之后.作者建议对于多个字符串(超过2个),
"......赞成这样一种形式,
strcpy(s1 += strlen(s1), s2)可以节省重复的,不断延长的,重新扫描弦乐的初始部分..."(第395页)
我无法理解这段代码片段.我的理解是他将s1指针的长度添加到指针以便将Null字符的索引传递给strcpy,这样strcpy就不必循环遍历s1来找到Null字符而只能开始将s2复制到s1中,那是对的吗?
如果我的理解是正确的,那么当代替strcpy时,它如何导致任何效率,strlen仍然必须循环通过字符串来确定其长度?
是的:s1 += strlen(s1)是要给你一个指针终止0,所以strcpy(..., s2)会喜欢的工作strcat()-追加s2到s1(假设有足够的空间,s1需要注意的是,strcpy()不"圈虽然S1找到空" -它只是写在给定的位置strcat确实找到了Null.
优化的关键是+=我们实际上正在改变s1(你最好采用原始值的副本).所以我们只取最后一个字符串的长度,而不是第一个字符串开头的长度(这就是strcat解决方案的作用).