c - 查找字符串结尾 : *s++ VS *s then s++

标签 c pointers postfix-operator

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

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

while (*s++)
    ;

但是,这个方法并没有奏效。我传递给它的字符串没有被正确复制。具体来说,我试图将“abc”复制到包含“\0”的 char[] 变量。

从阅读 C K&R 书来看,它看起来应该有效。该紧凑形式应采取以下步骤。

  1. *s 与'\0'进行比较
  2. 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指向空终止符之后的字符。在下面的代码中考虑到这一点。

关于c - 查找字符串结尾 : *s++ VS *s then s++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2174426/

相关文章:

Java 和 C 集成 - 运行应用程序

c - 有没有办法在一个线程而不是其他线程中关闭 stderr 的输出?

c++ - 多重继承的虚方法表

c - utarray.h 中的 "implicit declaration of function"(uthash 的一部分)

c - 为什么输出末尾有随机字符?

C++ 基类型到指针的转换

c - 关于C中指针和字符串的问题

c++ - 为什么这段代码返回 0 和 1?

C++ 后缀/前缀运算符重载为非成员函数

c++ - 后缀前缀运算符重载错误 C++