C别名规则对于有符号/无符号变量和一般的字符访问都有例外。所以这里没有麻烦。
引用标准:
对象的存储值只能由具有以下类型之一的左值表达式访问:88)
-与对象的有效类型兼容的类型,
-与对象的有效类型兼容的类型的合格版本,
-与对象的有效类型相对应的有符号或无符号类型的类型,
-作为与对象的有效类型的限定版本相对应的有符号或无符号类型的类型,
-在其成员中包含上述类型之一的聚合或联合类型(递归地包含子聚合或包含的联合的成员),或者
-a字符类型。
所有标准库函数都将任何char参数视为unsigned char,因此传递char*、unsigned char*或signed char*的处理方式相同。
引用
对于本子句中的所有函数,应将每个字符解释为其类型为unsigned char (因此,每个可能的对象表示都是有效的,并且具有不同的值)。
尽管如此,如果你得到了错误的签名,你的编译器应该会报错,特别是如果你启用了所有的警告(你应该,总是这样)。