【发布时间】:2013-01-09 10:06:38
【问题描述】:
在 UTF8 中,我使用这个函数来计算字符数(不是字节数):
int schars(const char *s)
{
int i = 0;
while (*s) {
if ((*s & 0xc0) != 0x80) i++;
s++;
}
return i;
}
这是否适用于纯 char 为 unsigned char 的实现?
【问题讨论】:
-
有趣,几乎没有关系,事实:普通
char是unsigned char默认在gcc下。在 MSVC 下,它是signed char。按照标准,char、unsigned char和signed char是三种不同的类型。 -
@Corbin 我认为普通的
char在 gcc 上是signed char -
本可以发誓 gcc 默认已签名,但看起来您是对的。哎呀:)。
-
这是因为默认的
char类型具有实现定义的签名,不像int等所有其他整数类型,它们都保证默认签名。 -
@Corbin, David:对于 GCC,“如果你不指定
-fsigned-char或-funsigned-char的默认值”取决于目标。当您为新目标配置 GCC 时,如果您不配置任何内容,则可能存在“默认值的默认值”。我不知道。
标签: c unsigned-char