这串代码跑起来之后,为什么会莫名其妙的有其他字符跳出来?


#include
#include
#include
#include
int main()
{
    char arr1[] = "世界灿烂盛大,欢迎回家!";
    char arr2[] = "                        ";
    int left = 0;
    int right = strlen(arr1) - 1;
    
    while(left <= right)
    {
        arr2[left] = arr1[left];
        arr2[right] = arr1[right];
        printf("%s\n", arr2);
        Sleep(1000);
        left++;
        right--;
    }
    printf("%s\n",arr1);
    return 0;
}

img

一个中文占两个字节, 比如 世 ,就是 arr1[0] 和 arr1[1] 组合成的,所以 输出一半,有奇怪的字符也很正常

一个汉字占两个字节,要实现效果,这么改:

#include<stdio.h>
#include<string.h>
#include<windows.h>
#include<stdlib.h>
int main()
{
    char arr1[] = "世界灿烂盛大,欢迎回家!";
    char arr2[32] = "                      "; //修改
    int left = 0;
    int right = strlen(arr1) - 1;
    arr2[right+1] = '\0'; //修改
    while(left <= right)
    {
        arr2[left] = arr1[left];  
        left++;                   //修改
        arr2[left] = arr1[left];  //修改
        left++;                   //修改

        arr2[right] = arr1[right];
        right--;                  //修改
        arr2[right] = arr1[right];//修改
        right--;                  //修改

        printf("%s\n", arr2);
        Sleep(500);
    }
    printf("%s\n",arr1);
    return 0;
}