无符号 char* 而不是 char*

问题描述 投票:0回答:1

为什么大多数参数中带有字符串的 c 函数通常都有定义

char*
而不是
unsigned char*
?根据我的理解
unsigned char*
更通用。 当我有
unsigned char*
并且需要以正确的方式传递给
char*
时如何处理?

例如,调用下面示例中的函数是一种好的风格吗?

unsigned char* a=...
strlen((char*)a);
c strlen
1个回答
0
投票

标准规定:

声明为 char 类型的对象足够大,可以存储基本执行字符集的任何成员。如果基本执行字符集的成员存储在 char 对象中,则其值保证为非负。如果任何其他字符存储在 char 对象中,则结果值是实现定义的,但应在该类型可以表示的值范围内。

char
保证能够将所有字符表示为正数。

此外:

char、signed char、unsigned char 三种类型统称为 字符类型。实现应将 char 定义为与有符号字符或无符号字符具有相同的范围、表示和行为。

char
是否签名是由实现定义的。

因此,

char

类型是定义为最适合存储实现字符的类型。无需将其转换为 
unsigned char

© www.soinside.com 2019 - 2024. All rights reserved.