我在写一个简单的字符串连接程序。查找字符串的结尾:* s ++ VS * s then s ++
该程序以我发布的方式工作。但是,我首先使用下面的代码来编写代码来查找字符串的末尾:
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;
}
在此先感谢。
供将来参考“没有用”。 *不是*失败模式的有用描述。结果与预期结果有什么不同? – dmckee 2010-02-01 04:45:34
不相关的笔记,每当做非明显的东西,使用括号。你可能还记得现在++在运算符优先级表中位于*之上,但是经过7个小时的编码之后,你真的开始怀疑是否* s ++;意思是*(s ++);或(* s)++; – 2010-02-01 08:18:53
只是一个附注:为该功能取另一个名称。这不是strncat的工作原理。 – quinmars 2010-02-01 12:34:37