19行为什么要写s--不太理解

img


#include 
#include 
void Strcat(char *s1, char *s2);
int main()
{
    char str1[200];
    char str2[100];
    gets(str1);
    gets(str2);
    Strcat(str1, str2);
    return 0;
}
void Strcat(char *s1,char *s2)
{
    char str[1024];
    char *s=str;
    for(;*s1!='\0';s1++,s++)
    *s=*s1;
    s--;
    for(;*s2!='\0';s2++,s++)
    *s=*s2;
    printf("%s\n",str);
}

s是指向str数组的指针,*s是str数组中的值。
s--是移动指针指向上一个地址,相当于str[i]和str[i-1]的关系。

单步调试一下

供参考:

#include <stdio.h>
#include <stdlib.h>
void Strcat(char *s1, char *s2);
int main()
{
    char str1[200];
    char str2[100];
    gets(str1);
    gets(str2);
    Strcat(str1, str2);
    return 0;
}
void Strcat(char *s1,char *s2)
{
    char str[1024];
    char *s=str;
    for(;*s1!='\0';s1++,s++)
        *s=*s1;
    //s--;  这句是多余的,*s此时在'\0'位置。
    for(;*s2!='\0';s2++,s++)
        *s=*s2;
    *s = '\0'; // 修改 这里漏了字符串str的结束符'\0'。
    printf("%s\n",str);
}