不懂为什么输出的是这个,望解答

不懂为什么输出的是这个,望解答

#include <stdio.h>

int main()
{
    char str[] = "中文";
    int length, i;

    length = sizeof(str) / sizeof(str[0]);

    printf("length of str: %d\n", length);

    for (i = 0; i < length; i++)
    {
        printf("str[%d] = %d\n", i, str[i]);
    }

    return 0;
}

img

一个汉字在计算机中占两个字节,这里两个汉字共4个字节
编译器会自动在字符串后加上一个”\0”作为结束符,所以会占5个字节。
但字符串的长度其实还是4,不包含结尾的结束符,可以使用strlen()来验证
至于输出负数,由于一个汉字两个字节,单个输出还是以整数形式可能就乱码了

一个中文字符两个字节,字符串结尾有结束符,所以打印出来的长度是5,中文字符不能按照单个字节单独输出,所以str[0]到str[3]是其他的值,str[4]=0表示结束符‘\0’

c语言中一个中文两个字符长度,字符串存放字符数组中,结尾处会默认增加一个结束字符\0,所以总长度是5,输出字符数组内容时,用的%d所以输出的是每个字符的int值