如何解决打印中的字节不对等问题。


#include 
#include 
int main()
{
    char arr[]={"南朝四百八十四,多少楼台烟雨中"};
    char arr2[]={"##############################"};
    int left = 0;
    /*int sz = sizeof(arr) / sizeof(arr[0]);*/
    int right = strlen(arr) - 1;

    while (left <= right)
    {

        arr2[left] = arr[left];
        arr2[right] = arr[right];
        printf("%s\n", arr2);
        left++;
        right--;
    }
    return   0 ;
}
 



怎么个不对齐呢?

控制台用等宽字体,善于使用 \t 制表符。

由于你定义的数组arr和arr2数组大小不一样。
且arr数组是44个字符,而arr2数组只有29个字符。
由于arr2数组空间小于aar数据空间,因此前几次打印只有left可以打印,right超出arr2数组范围,会出现数组越界,因此左右不会对称。
且由于arr数组定义了中文字符串,中文字符占用2个字节,而left和right是+1和-1.中文打印也会出现乱码。
因此建议你做如下修改
1、保证arr2数组空间大小大于等于arr数组空间大小;
2、arr数组为英文字符,这样便于观察,不会产生乱码。

这个要考虑源码中的中文编码问题
如果源码保存为utf-8编码,那arr1的strlen应该是44,
如果保存为GB2312编码,那arr1的strlen应该是29, 与arr2是同等长度。

运行结果如下:

img