首先,我有一个函数,其中我将标志存储在
unsigned char*
类型中。例如对于Abcdef!?
,它是[65 0] [98 0] [99 0] [100 0] [101 0] [102 0] [33 0] [63 0]
,每个符号在Unicode中占用2个字节。
当我使用for(unsigned char i=0; i<17; i++) printf("%c", pointer[i]);
时,一切正常,它显示Abcdef!?
。但是当我使用printf("%s" pointer);
时,它只给我A
,什么都没有。你能告诉我为什么吗?
0
字节了吗?%s
是用来打印C字符串的,它以空字符为结尾;这被称为空字符结束字符串(Null Terminated Byte String)。因此,在第一个0
字节之前,只能获取到第一个字符,然后就停止读取任何其他字符。 - BoBTFishprintf
不是 C++ 风格的,但它与 iostreams 一样是 C++ 标准的一部分。我无法看出在 C 和 C++ 中将 Unicode 存储在unsigned char *
中的可取性方面有任何区别。 - Martin Bonner supports Monica