asika2004 发表于 2021-2-15 10:31:11

关于test12.c

如果把%s 改成%c。为什么结果会变成了P

#include <stdio.h>
int main()
{
      char a = {'F','i','s','h','C'};
      printf("%c\n",a);

      return 0;
}

asika2004 发表于 2021-2-15 10:31:46

不清楚
改成char 为unsigned char 变成了?

jackz007 发表于 2021-2-15 12:00:01

本帖最后由 jackz007 于 2021-2-15 12:01 编辑

      a 是一个指针,对于 32 位的操作系统而言,一个指针长度是 4 个字节,64 位系统是 8 个字节,由于 "%c" 只能显示一个字节,而整个指针 a 由 4 或 8 个字节构成,那么,printf("%c") 在显示这个指针的时候,会从 4 或 8 个字节中,抽取最低位的那个字节进行显示,比如,a = 0022FEB3,那么,就会把 B3 显示成 "%c",我们从屏幕上看到的就是一个问号 "?"。
#include <stdio.h>
int main(void)
{
      union {
                unsigned char * p                                                          ;
                unsigned char c                                          ;
      } b                                                                              ;
      char a = {'F','i','s','h','C'}                                                ;
      int i                                                                              ;
      b . p = a                                                                        ;
      printf("%c\n" , b . p)                                                             ;
      printf("%p\n" , b . p)                                                             ;
      for(i = 0 ; i < sizeof(char *) ; i ++) printf("%02X , %c\n" , b . c , b . c) ;
}

asika2004 发表于 2021-2-15 15:56:49

感谢回复,还没学指针,看不太懂。。
页: [1]
查看完整版本: 关于test12.c