请分析下下面代码输出结果怎么回事?

wang19891010 2012-05-20 02:54:34
#include<iostream>
using namespace std;

int main(void)
{
char a[2];
char *p =a;
for(int i =0 ;i<7;i++)
cout <<p+i <<"\t长度:" <<strlen(p+i) <<endl;
return 0;
}


运行结果如下

其中那个"烫"占2字节,被拆开的"汤"字是不是在内存中存储占1个字节?其他ASCII字符占一字节,怎么字符串长度总是多加1?还有显示的空格好像有2个等等
...全文
95 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
mars_man 2012-05-21
  • 打赏
  • 举报
回复
基本是在错误的情况下分析错误的现象
youkuxiaobin 2012-05-20
  • 打赏
  • 举报
回复
不要玩这种,vs和g++不一样的
qq120848369 2012-05-20
  • 打赏
  • 举报
回复
越界了还看什么看.
wang19891010 2012-05-20
  • 打赏
  • 举报
回复
我知道了,把所有的字符串中的字符化为整型常量就好理解了。上面运行结果第一行长度为7的字符串其实那个?占2个字节。 整个字符串对应整型类型为 -52 -52 -52 -52 -64 -1 18 其中-52 -52共同构成'烫'字,-52 -64构成'汤'字,-64 -1构成那个'?'字 -1构成' '这个符号,18代表ASC字符常量''字(打不出来,就是上下箭头符号)。这样就很好理解了。其他类推。
我这个针对自己的这段代码及本机是这样显示的,具体情况可能显示的数据不一样,不过思路是把字符串中的字符常量转化成等价的整型常量就可以了。
情歌王子 2012-05-20
  • 打赏
  • 举报
回复
P+0表示数组的起始地址即a[0],然后P+1则表示a[1]的地址,p+2和以后的都指向未知的内存空间。
wang19891010 2012-05-20
  • 打赏
  • 举报
回复
这些不假,大概管理库向OS申请的空间比自身定义的要大些。不过这不是重点,那个p指针指向分配区域的字符串没有'\0'的,既然这样为什么显示的长度跟调用strlen函数返回长度不一样呢?[Quote=引用 1 楼 的回复:]
用VC6的编译器确实是这样
因为在数组分配空间的时候 会分配倍数个空间 然后就有了八个这样的话 p+i就表示了起始地址
[/Quote]
無_1024 2012-05-20
  • 打赏
  • 举报
回复
用VC6的编译器确实是这样
因为在数组分配空间的时候 会分配倍数个空间 然后就有了八个这样的话 p+i就表示了起始地址

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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