元亨利贞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])

    评论

报告相同问题?

悬赏问题

  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作