C程序--编译出错--求解

appleswanglei 2008-08-21 11:26:09
C程序--编译出错--求解

#include<stdio.h>
int main()
{
char a;
a='\37';
return 0;
}

1,gdb调试结果:a=31 ??为什么?
2,如果把 a='\37'换成 a='\38',程序编译出错:overflow in implicit constant conversion ?????

求解!
...全文
97 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
appleswanglei 2008-08-21
  • 打赏
  • 举报
回复
十分感谢各位!
xqls_xqls 2008-08-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lbh2001 的回复:]
数字转义字符默认八进制,所以\38是错误的
八进制的37等于十进制的31
[/Quote]
e_sharp 2008-08-21
  • 打赏
  • 举报
回复
\38 = 32
lbh2001 2008-08-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 dede22 的回复:]
vs解释的更高深。。如果转移的数字超过7,自动解释为16进制,超过f,解释为字符,gcc估计没有这样做
[/Quote]
那是VS不符合标准的做法,没有移植性
ximi0000 2008-08-21
  • 打赏
  • 举报
回复
a='\37';
首先,\后面加数字是表示转义字符
\ddd 1~3位八进制数所代表的字符
所以\37表示 八进制数的37带表的字符,十进制就是3*8+7=31
所以a=31
第二个一样,八进制里面就没有8,所以a='\38'里面的8就是 错的
下面的网址是介绍转义字符的
http://zhidao.baidu.com/question/6713956.html
dede22 2008-08-21
  • 打赏
  • 举报
回复
vs解释的更高深。。如果转移的数字超过7,自动解释为16进制,超过f,解释为字符,gcc估计没有这样做
bitxinhai 2008-08-21
  • 打赏
  • 举报
回复
a='\37';
后面的是转义字符,是个八进制数,
数值的大小应该为0-7,出现8当然会错了!!
太乙 2008-08-21
  • 打赏
  • 举报
回复
换成 a='\38',vs2008不会编译出错~



lbh2001 2008-08-21
  • 打赏
  • 举报
回复
数字转义字符默认八进制,所以\38是错误的
八进制的37等于十进制的31

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧