返回信息流题目如图。。。。我用VS它提示的是八进制转义字符越界。。。DEV可以跑,一个7,一个8.。。好诡异。。
这是一条镜像帖。来源:北邮人论坛 / cpp / #91976同步于 2016/6/2
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
被学弟一道C语言程序设计期末题弄蒙了。。。大家帮帮我
captainprice
2016/6/2镜像同步22 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
求暖神解释~
【 在 captainprice (captainprice) 的大作中提到: 】
: [upload=1][/upload]
: 题目如图。。。。我用VS它提示的是八进制转义字符越界。。。DEV可以跑,一个7,一个8.。。好诡异。。
: --
"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
那就是没有正确答案咯。。。。
【 在 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 的大作中提到: 】
: 这题炸天啊
: 翻了翻ascii表 十进制竟然不是连续的 77直接就到100,卧槽…
我似乎弄错了,a[7]也会被初始化为'\0'应该,strlen(p)的结果应该就是7
【 在 captainprice 的大作中提到: 】
: 那就是没有正确答案咯。。。。
我也是这样想的,45之前插个0的话,编译器就能这么拆分了。。。但是在不加0 的情况下,就是报错的。。。
【 在 ml3615556 的大作中提到: 】
: 1 2 3 \45 6 \7 8 9
: ?