元亨利贞t 2019-02-12 16:27 采纳率: 0%
浏览 611

C语言新手问题scanf函数将字符串指针用%c的格式输出结果是什么?

#include<stdio.h>
int main(){
char *string="I love China";
printf("%c\n",string);



return 0;
}

我用vs2005执行结果是“?”

上网查了,有一篇文章“作者:Lemon_jay
来源:CSDN
原文:https://blog.csdn.net/lemon_jay/article/details/82917000 ”,这篇文章意思是这是将字符串指针的值的十进制形式输出,但%c要求输出字符,将地址值转换为对应的字符输出,网上又有讲大于127的整型用%c输出要截取低位。

我的理解是:string类型是char *,占内存是四个字节,值是16进制数,我调试string是0x004157b8,十进制是4282296,那么是直接把0x004157b8去截取低位b8,还是把string先转十进制数4282296,变成整型常量,再用int存储,而整型存储又是以补码存放(当然这个正数补码就是原码),再截低位b
8?

b8十进制是184,书上ASCII码值中有从0到127,这个184怎么办,为什么输出是“?”,网上好像讲标准ASCII 码也叫基础ASCII码,使用7 位二进制数,第1位二进制为0,而这里184二进制是10111000,第一位是1。

还有,我把上面的数十进制4282296以及把它加1加2(即4282297,4282298)这样输出,

#include<stdio.h>
int main(){
char *string="I love China";
printf("%c\n",4282296);



return 0;
}

结果都是“?”
这样是不是把这两个整型常量先用int存储,分别是0x004157b9和0x004157ba,再截取低位,即b9和ba,十进制为185,186,还是不在127范围内,二进制为10111001,10111010,第一位还是1,这是不是说截了低位也就是只有8位二进制数后第一位是1,输出都是“?”?

网上又有讲将300,400输出,也就是如下:

#include<stdio.h>
int main(){
char *string="I love China";
printf("%c\n",4282296);



return 0;
}

300结果是“,”,400结果是“?”,300二进制是100101100,400二进制是110010000,这个又是不是这样:300,400都是整型常量,都被内存以0000000100101100和0000000110010000存储,再截取低位,300为00101100,400为10010000,而00101100十进制为44,%c输出就是“,”,10010000第一位是1,输出就是就是“?”?
希望各位大神能详细指教,万分感谢·

  • 写回答

1条回答 默认 最新

  • jinwoyunni 2019-02-12 17:41
    关注

    printf("%c\n", string[0])

    评论

报告相同问题?

悬赏问题

  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗
  • ¥15 钢筋实图交点识别,机器视觉代码
  • ¥15 如何在Linux系统中,但是在window系统上idea里面可以正常运行?(相关搜索:jar包)
  • ¥50 400g qsfp 光模块iphy方案
  • ¥15 两块ADC0804用proteus仿真时,出现异常
  • ¥15 关于风控系统,如何去选择