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

时间:2017-09-26 12:23:07

标签: c format printf

printf()函数使用格式说明符%s来打印char *。 该标准未指定char如何实现为已签名或未签名。

因此,当char以签名char实施时,我们使用%s来打印unsigned char *,这样做是否安全?

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

2 个答案:

答案 0 :(得分:7)

  

...在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.18

     

charsigned charunsigned char这三种类型统称为字符类型。 C11§6.2.515

答案 1 :(得分:-1)

如果您尝试这样做:

#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 = 0xbff5391b  
&name[0] = 0xbff5391b
name printed as %s is siva
*name = s
name[0] = s

所以'name'实际上是指向内存中字符数组的指针。