while(*s++); 和 while(*s)s++; 的区别?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

while(*s++); 和 while(*s)s++; 的区别?

a123456678 2016-06-03 18:21:31 1920

《C程序设计语言》第二版的习题5.1:用指针的方式实现strcat即字符串连接函数。

这个是可以实现的

#include <stdio.h>

void strcatp(char *s, char *t);

int main()
{
    char s[] = "Hello";
    char t[] = " world!";
    
    strcatp(s, t);

    printf(s);
    return 0;
}

void strcatp(char *s, char *t){
    while(*s)
        s++;
    
    while(*s++ = *t++)
        ;
}
输出结果为Hello world!

而这种却不行?

#include <stdio.h>

void strcatp(char *s, char *t);

int main()
{
    char s[] = "Hello";
    char t[] = " world!";
    
    strcatp(s, t);

    printf(s);
    return 0;
}

void strcatp(char *s, char *t){
    while(*s++)
        ;
    
    while(*s++ = *t++)
        ;
}

输出结果:Hello

while的区别 while区别 less区别 b/s区别 b/s的区别
分享到
取消 提交回答
全部回答(1)
  • a123456678
    2019-07-17 19:27:01

    关键的错误是

        while(*s)
            s++;
    在s指向\0时候停止增加指针。
    而
    
        while(*s++)

    在指向0时候仍为指针增加了1。从而使得两段拼接的字符串中间存在0,printf在这个中间点认为字符串已经结束。

    0 0
云计算
使用钉钉扫一扫加入圈子
+ 订阅

时时分享云计算技术内容,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

最新问题