使用printf()打印数据类型char

使用printf()打印数据类型char,c,format,printf,C,Format,Printf,printf()函数使用格式说明符%s打印char*。 该标准没有规定如何将char实现为有符号或无符号 因此,当char被实现为有符号char,并且我们使用%s打印无符号char*,这样做安全吗 在这种情况下,我们应该使用哪种格式说明符?如果您尝试以下操作: #include<stdio.h> void main() { char name[]="siva"; printf("name = %p\n", name); printf("&name[0] = %p\n"

printf()
函数使用格式说明符
%s
打印
char*
。 该标准没有规定如何将
char
实现为有符号或无符号

因此,当
char
被实现为有符号
char
,并且我们使用
%s
打印
无符号char*
,这样做安全吗

在这种情况下,我们应该使用哪种格式说明符?

如果您尝试以下操作:

#include<stdio.h>

void main()
{
 char name[]="siva";
 printf("name = %p\n", name);
 printf("&name[0] = %p\n", &name[0]);
 printf("name printed as %%s is %s\n",name);
 printf("*name = %c\n",*name);
 printf("name[0] = %c\n", name[0]);
}
所以“name”实际上是指向内存中字符数组的指针

。。。当
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.
(%s)。。。参数应为指向字符类型数组初始元素的指针。。。C11dr§7.21.6.1 8

三种类型
char
signed char
unsigned char
统称为字符类型。C11§6.2.5 15


指针没有符号,指针目标也不是算术处理的,所以这不重要。@MartinJames不清楚如何在这里应用。也许这反映了问题的早期版本?谢谢!我已经阅读了标准,看到%s需要字符类型,但我还没有得到字符类型是什么。我应该更仔细地阅读标准。
char *cp = ...;
signed char *scp = ...;
unsigned char *ucp = ...;
printf("%s", cp);  // OK.
printf("%s", scp);  // OK.
printf("%s", ucp);  // OK.