K&;R c书籍练习5-3 strcat示例

K&;R c书籍练习5-3 strcat示例,c,pointers,C,Pointers,对于这个练习,我做了一点修改,它停止了工作! 我知道它在哪里停止工作,但我不知道它为什么停止 #include <stdio.h> #define MAXLINE 20 void concat(char *, char *); int main(){ char s[MAXLINE] = "hello,"; char t[MAXLINE] = "world"; concat(s, t); printf("

对于这个练习,我做了一点修改,它停止了工作! 我知道它在哪里停止工作,但我不知道它为什么停止

#include <stdio.h>
#define MAXLINE 20
void concat(char *, char *);
int main(){
    char s[MAXLINE] = "hello,";
    char t[MAXLINE] = "world";
    concat(s, t);
    printf("%s\n", s);
    return 0;
}
void concat(char *s, char *t){
    int index = 0;
    while(*s){
       s++;
    }
    while(*s++ = *t++)
            ;
}

#包括
#定义MAXLINE 20
空心混凝土(char*,char*);
int main(){
char s[MAXLINE]=“你好,”;
字符t[MAXLINE]=“世界”;
concat(s,t);
printf(“%s\n”,s);
返回0;
}
void concat(char*s,char*t){
int指数=0;
而(*s){
s++;
}
而(*s++=*t++)
;
}
我用cc编译它,然后运行它,它输出你好,世界,看起来很棒; 但是我想在(*s){s++;}
在while(*s++)中,它更简单!但是它停止工作,输出是你好,,很难输出s的变化值,所以任何人都可以解释背后的逻辑?任何帮助都会很棒

第一个循环用于定位
s
,从而指向终止的
0
++
的问题是,在条件已计算为false之后,它将再次递增


如果要保存按键,可以删除
{
}
第一个循环用于定位
s
,使其指向终止的
0
++
的问题是,在条件已计算为false之后,它将再次递增


如果要保存按键,可以删除
{
}

其他人已经解释过,您建议的解决方案超过了s的终止'\0'。你可以做:

while(*s && s++);
但我认为for循环更直接地表达了它:

for(; *s; s++);

其他人已经解释过,您建议的解决方案超过了s的终止'\0'。你可以做:

while(*s && s++);
但我认为for循环更直接地表达了它:

for(; *s; s++);

*s++
*s
s++
不同。在您的版本中,即使条件评估为false,也会发生中断。
*s++
*s
s++
不同。在您的版本中,即使条件计算为false,也会发生安葬。好的,thx和我将尝试打印concat之后的所有字符,以查看world是否在空终止符之后…您是对的,它再次在后面!真的很狡猾,很有道理!非常感谢。好的,thx和我将尝试打印concat之后的所有字符,看看世界是否在空终止符之后…你是对的,它再次在后面!真的很狡猾,很有道理!非常感谢。是的,这是一个很好的解决方案!并在测试条件下的while循环中使用&&来实现我的目标!嗯,这是一个很好的解决方案!并在测试条件下的while循环中使用&&来实现我的目标!谢谢