为什么这个C程序输出有乱码?

Why are there garbled characters in this C program output?

#include <stdio.h>
#include <locale.h>
#include <wchar.h>

int main() {
//    setlocale("LC_ALL","");
    unsigned char utf[]={0xe4,0xb8,0x80,0x0a};
    printf("%s",utf);
    return 0;
}

您的数组缺少所需的空终止符字符串,因此 printf 继续打印超出数组末尾的字节,直到遇到空字节。 (或者当您的程序由于越界访问而崩溃时。)

添加空字节:

unsigned char utf[]={0xe4,0xb8,0x80,0x0a,0x00};

格式 %s 需要一个指向字符串的指针作为相应的参数。即输出字符序列应以终止零字符结束 '[=13=]'.

这个数组

unsigned char utf[]={0xe4,0xb8,0x80,0x0a};

不包含字符串。所以你需要明确指定你要输出多少个字符。例如

printf("%.*s", 4, utf);