该printf()函数使用格式说明符%s进行打印char *.该标准未指定如何char实现为有符号或无符号.
因此,当char实施为已签名char,我们用于%s打印时unsigned char *,这样做是否安全?
在这种情况下我们应该使用哪种格式说明符?
...
char实施时signed char,我们"%s"用来打印unsigned char*.这样做安全吗?
是的,这是安全的.
char *cp = ...;
signed char *scp = ...;
unsigned char *ucp = ...;
printf("%s", cp); // OK.
printf("%s", scp); // OK.
printf("%s", ucp); // OK.
Run Code Online (Sandbox Code Playgroud)
(%s)...参数应该是指向字符类型数组的初始元素的指针.......C11dr§7.21.6.18
这三种类型
char,signed char以及unsigned char统称为字符类型.C11§6.2.515