user-0 提问: c语言字符串数组输出汉字出错

回复:
user: user-1
content: 引用 6 楼 與蘤舊縐 的回复:[quote=引用 2 楼 qq_45684602 的回复:] [quote=引用 1 楼 喜欢做我自己的回复:]%s显示的是字符串 %c才是显示字符 要显示一个汉字用%c 如果使用的是%s，你后面的参数代表的是开始地址，会将该地址之后的所有数据显示出来  记得点赞 一个汉字不是对应2个两个字节吗，相当于2个字符[/quote]   一个字节，又不是java[/quote]你输出的是char的大小 和 内容无关 汉字编码不可能1字节

user: user-2
content: 刚没看代码，你没想要空格，那就把数组c初始化一遍就行了

user: user-2
content: 没有\0，一个汉字一个空格就已经占了3字节了，你的第二为应该申请长度为4，多的一个字节存储'\0'

user: user-3
content: 把c的列数增大吧，比如用char c[100][16];再试试～ 另外，汉字不是ASCII那样一个字符对应一个字母（汉字），至少是2个字符对应一个汉字，所以不能直接赋值，而是建议 用memcpy，还要注意字符串的结束标记'\0'

user: user-4
content: c int or wint_t When used with printf functions, specifies a single-byte character; when used with wprintf functions, specifies a wide character.  C int or wint_t When used with printf functions, specifies a wide character; when used with wprintf functions, specifies a single-byte character.   译文： c与printf函数一起使用时，指定单字节字符；与wprintf函数一起使用时，指定宽字符。 C与printf函数一起使用时，指定宽字符；与wprintf函数一起使用时，指定单字节字符。

user: user-4
content: s String  When used with printf functions, specifies a single-byte–character string; when used with wprintf functions, specifies a wide-character string. Characters are printed up to the first null character or until the precision value is reached.   S String When used with printf functions, specifies a wide-character string; when used with wprintf functions, specifies a single-byte–character string. Characters are printed up to the first null character or until the precision value is reached.   经fanyi.baidu.com翻译：  s字符串与printf函数一起使用时，指定单字节字符串；与wprintf函数一起使用时，指定宽字符串。字符最多打印到第一个空字符或直到达到精度值。  S字符串与printf函数一起使用时，指定宽字符串；与wprintf函数一起使用时，指定单字节字符串。字符最多打印到第一个空字符或直到达到精度值。

user: user-5
content: setlocale(LC_ALL, "chs"); const wchar_t *hz = L"你好"; wprintf(L"%ls", hz);

user: user-6
content: 是啊，%c%c才显示一个汉字啊， char a[16] = "你好"; printf("%c%c",a[0],a[1]); 只显示"你"

user: user-7
content: 引用 10 楼 真相重于对错 的回复:你的赋值溢出的，char是一个字节，但汉字不是一个字节，当你把汉字赋予一个字节变量时，丢失了它高字节的部分。 因此你再次打印，就会是乱码  嗯，忘记打印出来看看了~~，char类型是一个字节

user: user-0
content: 引用 5 楼 喜欢做我自己的回复:char a[16] = "你好"; printf("%c%c",a[0],a[1]); 应该是这样的，2个%c一个汉字

user: user-5
content: 引用 6 楼 與蘤舊縐 的回复:[quote=引用 2 楼 qq_45684602 的回复:] [quote=引用 1 楼 喜欢做我自己的回复:]%s显示的是字符串 %c才是显示字符 要显示一个汉字用%c 如果使用的是%s，你后面的参数代表的是开始地址，会将该地址之后的所有数据显示出来  记得点赞 一个汉字不是对应2个两个字节吗，相当于2个字符[/quote]   一个字节，又不是java[/quote] 你的赋值溢出的，char是一个字节，但汉字不是一个字节，当你把汉字赋予一个字节变量时，丢失了它高字节的部分。 因此你再次打印，就会是乱码

user: user-0
content: 引用：    首先你要明白a[0]不是“百”，只是“百”左边一半，一个汉字至少要两个字节（与编码方式有关，大多数情况下是两个字节），要输出“百”至少要： printf("%c%c",a[0],a[1]);

user: user-0
content: 可网上都说一个汉字2个字节啊

user: user-0
content: 引用 6 楼 與蘤舊縐的回复:[quote=引用 2 楼 qq_45684602 的回复:] [quote=引用 1 楼 喜欢做我自己的回复:]%s显示的是字符串 %c才是显示字符 要显示一个汉字用%c 如果使用的是%s，你后面的参数代表的是开始地址，会将该地址之后的所有数据显示出来  记得点赞 一个汉字不是对应2个两个字节吗，相当于2个字符[/quote]   一个字节，又不是java[/quote] 好吧，我可能傻了   nnn

user: user-7
content: 引用 2 楼 qq_45684602 的回复:[quote=引用 1 楼 喜欢做我自己的回复:]%s显示的是字符串 %c才是显示字符 要显示一个汉字用%c 如果使用的是%s，你后面的参数代表的是开始地址，会将该地址之后的所有数据显示出来  记得点赞 一个汉字不是对应2个两个字节吗，相当于2个字符[/quote]   一个字节，又不是java

user: user-6
content: char a[16] = "你好"; printf("%c%c",a[0],a[1]);

user: user-6
content: 那就两个%c啊

user: user-1
content: 漏了 字符串结尾的 '\0'

user: user-0
content: 引用 1 楼 喜欢做我自己的回复:%s显示的是字符串 %c才是显示字符 要显示一个汉字用%c 如果使用的是%s，你后面的参数代表的是开始地址，会将该地址之后的所有数据显示出来  记得点赞 一个汉字不是对应2个两个字节吗，相当于2个字符

user: user-6
content: %s显示的是字符串 %c才是显示字符 要显示一个汉字用%c 如果使用的是%s，你后面的参数代表的是开始地址，会将该地址之后的所有数据显示出来  记得点赞