为什么大多数参数中带有字符串的 c 函数通常都有定义
char*
而不是 unsigned char*
?根据我的理解 unsigned char*
更通用。
当我有unsigned char*
并且需要以正确的方式传递给char*
时如何处理?
例如,调用下面示例中的函数是一种好的风格吗?
unsigned char* a=...
strlen((char*)a);
标准规定:
声明为 char 类型的对象足够大,可以存储基本执行字符集的任何成员。如果基本执行字符集的成员存储在 char 对象中,则其值保证为非负。如果任何其他字符存储在 char 对象中,则结果值是实现定义的,但应在该类型可以表示的值范围内。
char
保证能够将所有字符表示为正数。
此外:
char、signed char、unsigned char 三种类型统称为 字符类型。实现应将 char 定义为与有符号字符或无符号字符具有相同的范围、表示和行为。
char
是否签名是由实现定义的。
因此,char
类型是定义为最适合存储实现字符的类型。无需将其转换为
unsigned char
。