当前位置:  开发笔记 > 运维 > 正文

找到字符串的结尾:*s ++ VS*s然后是s ++

如何解决《找到字符串的结尾:*s++VS*s然后是s++》经验,为你挑选了2个好方法。

我正在编写一个简单的字符串连接程序.

该程序按我发布的方式工作.但是,我首先使用以下代码编写它来查找字符串的结尾:

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;
}

提前致谢.



1> Chris Jester..:

结束后while (*s++);,s指向空终止符后面的字符.在下面的代码中考虑到这一点.



2> John Knoelle..:

问题是

 while (*s++)
     ;

始终递增s,即使s为零(*s为假)

 while (*s)
    s++;

仅当*s非零时才增加s

所以第一个将指向第一个\ 0 之后的第一个字符,而第二个将指向第一个\ 0.

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有