C语言 strcpy函数复制规则

#询问下复制结束后的s2字符串中的内容是什么?
是否为A与B与C与'\0'与空格与'\0这六个字符?因此会输出这个结果。

#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
int main()
{

    char s1[] = "abc";
    char s2[] = "abc  ";
    char s3[] = "Abc";
    strcpy(s2, s3);
    for (int i = 0; i < 3; i++)
    {
        printf("%c#", s2[i]);
        
    }
    printf("\n");
    printf("sizeof(s2)=%d", sizeof(s2));






}

输出结果如下

img

strcpy(s2, s3); 之后,s2字符串和s3字符串一样,也就是前四个字符是Abc及'\0',然后s2中后面保留了空格和'\0'。所以输出是A#b#c#
sizeof(s2)的大小,由s2数组长度决定,s2初始化的字符串包括abc三个字符,以及两个空格,还有字符串结束符,所以s2实际长度为6

复制结束后,s2字符串中的内容为"A"、"b"、"c"、空格、'\0'、'\0'。所以说呢,输出的结果就是"A#b#c#"。又因为说s2数组的长度为6,所以就输出sizeof(s2)等于6喽!

调用strcpy(s2, s3);后,数组s2前面3个元素内容变为Abc,但是并未影响s2的长度,因此s2实际长度为6