您好,匿名用户
随意问技术百科期待您的加入

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

+2 投票

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

用户头像 提问 2012年 12月30日 @ Zed 上等兵 (260 威望)
分享到:

1个回答

+1 投票
 
最佳答案

关键的错误是

while(*s)
        s++;

在s指向\0时候停止增加指针。

  while(*s++)
        ;

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

用户头像 回复 2012年 12月30日 @ Athena 上等兵 (346 威望)
选中 2012年 12月31日 @Saber
提一个问题:

相关问题

0 投票
1 回复 98 阅读
+1 投票
1 回复 61 阅读
用户头像 提问 2013年 9月9日 @ Trundle 上等兵 (301 威望)
0 投票
1 回复 31 阅读
用户头像 提问 2013年 9月11日 @ Emiya Shirou 上等兵 (438 威望)
+3 投票
1 回复 84 阅读
0 投票
1 回复 45 阅读

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...