我正在编写一个简单的字符串连接程序.
该程序按我发布的方式工作.但是,我首先使用以下代码编写它来查找字符串的结尾:
while (*s++) ;
但是,该方法不起作用.传递给它的字符串未正确复制.具体来说,我试图将"abc"复制到一个持有"\ 0"的char []变量.
从阅读C K&R书籍看起来应该可行.紧凑的表格应采取以下步骤.
*s与'\ 0'进行比较
s指向下一个地址
那为什么不起作用呢?我在Debian上用gcc编译.
我发现这个版本确实有效:
strncat(char *s, const char *t, int n) { char *s_start = s; while (*s) s++; for ( ; n > 0 && *t; n--, s++, t++) *s = *t; *(s++) = '\0'; return s_start; }
提前致谢.
结束后while (*s++);
,s
指向空终止符后面的字符.在下面的代码中考虑到这一点.
问题是
while (*s++) ;
始终递增s,即使s为零(*s为假)
while (*s) s++;
仅当*s非零时才增加s
所以第一个将指向第一个\ 0 之后的第一个字符,而第二个将指向第一个\ 0.