使用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.