鱼C论坛

 找回密码
 立即注册
查看: 2019|回复: 6

[已解决]char后面跟了双引号会怎样

[复制链接]
发表于 2022-9-1 17:08:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
int main(void)
{
        char fuu = "C";
        printf("%c=%d\n",fuu,fuu);

        return 0;
}
最佳答案
2022-9-1 17:28:53
本帖最后由 桃花飞舞 于 2022-9-1 17:53 编辑
编程小白在进步 发表于 2022-9-1 17:18
你说的截取啥意思,最后打印的结果很奇怪是这样的[] = 16


也就是说char fuu; 的意思是在内存中分配一个字节空间, fuu = "C" 是把 "C"这个字符串放到fuu这个空间里面,而"C"  是由 'C'  '\0'组成的是两个字节,所以放不下会溢出, 而读取的时候读取的是fuu对应的这一个字节里面的数据,所以只要知道这个字节里的数据是什么就可以解释输出的结果了,按数组的思想,数据是线性的,即便溢出了 也在接下来的空间中,读取数据只是按地址找一段数据类型的空间,我用了截取.怕是我说多了你也是不懂的。'C' 的ASCII 值是67  '\0' 的ASCII的值是0  你的输出结果是比较奇怪,, 我的输出是$=36   正好$符号的ASSCII码值是36  而内存中是0010 0100 0011 0001      如果取   中间的8位就是0100 0011 = 67 正好是字符C  而你的[  ]的ASCII码值并不是 91 93我也不会解释
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-9-1 17:09:28 | 显示全部楼层
刚刚学习,不太懂,我给C这个字符上加的双引号,编译也能成功,但是肯定不争取,但是计算机怎么处理的有大佬分析一下嘛
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-1 17:15:09 | 显示全部楼层
本帖最后由 桃花飞舞 于 2022-9-1 17:17 编辑
编程小白在进步 发表于 2022-9-1 17:09
刚刚学习,不太懂,我给C这个字符上加的双引号,编译也能成功,但是肯定不争取,但是计算机怎么处理的有大 ...


加了双引号就是字符串了在内存中是 'C' '\0' 是两个字符 由于是char类型 用%c 输出的也就是一个字节,所以截取了C这个字符。用%d值应该不是67吧。算了这个我也不太清楚了,不过感觉没意义
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-1 17:18:02 | 显示全部楼层
桃花飞舞 发表于 2022-9-1 17:15
加了双引号就是字符串了在内存中是 'C' '\0' 是两个字符 由于是char类型 用%c 输出的也就是一个字节, ...

你说的截取啥意思,最后打印的结果很奇怪是这样的[] = 16
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-1 17:28:53 | 显示全部楼层    本楼为最佳答案   
本帖最后由 桃花飞舞 于 2022-9-1 17:53 编辑
编程小白在进步 发表于 2022-9-1 17:18
你说的截取啥意思,最后打印的结果很奇怪是这样的[] = 16


也就是说char fuu; 的意思是在内存中分配一个字节空间, fuu = "C" 是把 "C"这个字符串放到fuu这个空间里面,而"C"  是由 'C'  '\0'组成的是两个字节,所以放不下会溢出, 而读取的时候读取的是fuu对应的这一个字节里面的数据,所以只要知道这个字节里的数据是什么就可以解释输出的结果了,按数组的思想,数据是线性的,即便溢出了 也在接下来的空间中,读取数据只是按地址找一段数据类型的空间,我用了截取.怕是我说多了你也是不懂的。'C' 的ASCII 值是67  '\0' 的ASCII的值是0  你的输出结果是比较奇怪,, 我的输出是$=36   正好$符号的ASSCII码值是36  而内存中是0010 0100 0011 0001      如果取   中间的8位就是0100 0011 = 67 正好是字符C  而你的[  ]的ASCII码值并不是 91 93我也不会解释
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-1 17:54:06 | 显示全部楼层
一个小提示:编译这段代码产生了警告
4:14: warning: incompatible pointer to integer conversion initializing 'char' with an expression of type 'char [2]' [-Wint-conversion]
        char fuu = "C";
             ^     ~~~
1 warning generated.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-1 18:09:32 | 显示全部楼层
桃花飞舞 发表于 2022-9-1 17:28
也就是说char fuu; 的意思是在内存中分配一个字节空间, fuu = "C" 是把 "C"这个字符串放到fuu这个空间 ...

谢谢了,虽然不是很懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 00:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表