BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #91976同步于 2016/6/2
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

被学弟一道C语言程序设计期末题弄蒙了。。。大家帮帮我

captainprice
2016/6/2镜像同步22 回复
题目如图。。。。我用VS它提示的是八进制转义字符越界。。。DEV可以跑,一个7,一个8.。。好诡异。。
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
icybee机器人#1 · 2016/6/2
求暖神解释~ 【 在 captainprice (captainprice) 的大作中提到: 】 : [upload=1][/upload] : 题目如图。。。。我用VS它提示的是八进制转义字符越界。。。DEV可以跑,一个7,一个8.。。好诡异。。 : --
fanfanviking机器人#2 · 2016/6/2
"123\456\789"实际上有7个字符: '1', '2', '3', '\456', '\7', '8', '9' ('\456' 虽然越界,但是还是会解释成一个有效字符,我的机器上面是ascii码为46的char)。 1)对于char a[10]的定义,实际上只是把a[]开头的7个字节给初始化为以上的字符,后面的字节不管(栈里面是这样的,虽然很多编译器会在后面填上0)。所以根据以strlen来计算字符串长度,有可能出现lz的7,也有可以7+,视栈里面的内存情况而定; 2)sizeof()这个函数是计算数组或者变量的大小的,sizeof("123\456\789")里面实际上是一个8个字节的数组,前面7字节就是以上的字符,最后一个为0 (or '\0'),其实可以替代为const char b[] = "123\456\789"; sizeof(b); 所以结果就是8
captainprice机器人#3 · 2016/6/3
那就是没有正确答案咯。。。。 【 在 fanfanviking 的大作中提到: 】 : "123\456\789"实际上有7个字符: '1', '2', '3', '\456', '\7', '8', '9' ('\456' 虽然越界,但是还是会解释成一个有效字符,我的机器上面是ascii码为46的char)。 : 1)对于char a[10]的定义,实际上只是把a[]开头的7个字节给初始化为以上的字符,后面的字节不管(栈里面是这样的,虽然很多编译器会在后面填上0)。所以根据以strlen来计算字符串长度,有可能出现lz的7,也有可以7+,视栈里面的内存情况而定; : 2)sizeof()这个函数是计算数组或者变量的大小的,sizeof("123\456\789")里面实际上是一个8个字节的数组,前面7字节就是以上的字符,最后一个为0 (or '\0'),其实可以替代为const char b[] = "123\456\789"; sizeof(b); 所以结果就是8
du5307机器人#4 · 2016/6/3
这题炸天啊 翻了翻ascii表 十进制竟然不是连续的 77直接就到100,卧槽…
captainprice机器人#5 · 2016/6/3
呃。。。。你看错了吧。。。你看的应该是八进制。。。 【 在 du5307 的大作中提到: 】 : 这题炸天啊 : 翻了翻ascii表 十进制竟然不是连续的 77直接就到100,卧槽…
fanfanviking机器人#6 · 2016/6/3
我似乎弄错了,a[7]也会被初始化为'\0'应该,strlen(p)的结果应该就是7 【 在 captainprice 的大作中提到: 】 : 那就是没有正确答案咯。。。。
jh1机器人#7 · 2016/6/3
【 在 du5307 的大作中提到: 】 : 这题炸天啊 : 翻了翻ascii表 十进制竟然不是连续的 77直接就到100,卧槽…
ml3615556机器人#8 · 2016/6/3
1 2 3 \45 6 \7 8 9 ?
captainprice机器人#9 · 2016/6/3
我也是这样想的,45之前插个0的话,编译器就能这么拆分了。。。但是在不加0 的情况下,就是报错的。。。 【 在 ml3615556 的大作中提到: 】 : 1 2 3 \45 6 \7 8 9 : ?