为什么printf只显示第一个字母?

piz*_*man 3 c unicode printf

首先,我有一个功能,我有unsigned char*类型存储的标志.例如,Unicode中每个符号Abcdef!?[65 0] [98 0] [99 0] [100 0] [101 0] [102 0] [33 0] [63 0]2个字节.

当我使用for(unsigned char i=0; i<17; i++) printf("%c", pointer[i]);一切正常时,它显示Abcdef!?.但是当我使用printf("%s" pointer);它时,它只给我,A而不是别的.你能告诉我为什么吗?

Chr*_*ckl 6

因为printf("%s", pointer)字面意思是:打印每个char从存储的那个开始pointer直到'\0'遇到.

有一个'\0'后马上'A',所以只有第一个字符被打印出来.

  • @FiddlingBits:也许吧.这将适用于Windows(其中`wchar_t`存储UTF-16).它不适用于Linux平台,这些平台倾向于存储UCS4的四字节`wchar_t`(这不是UCS4). (3认同)
  • @FiddlingBits:不.`%ls`指向`wchar_t`的指针不是指向`char`的指针.即使`wchar_t`是16位小端(断开的MSVC定义,与Unicode不兼容),也会出现别名冲突,将`char`数组作为`wchar_t`访问,并且可能也会失去对齐要求. (3认同)