汇编网首页登录博客注册
pascale的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
文章收藏
友情链接

[2008-11-28 15:44] 关于C字符串声明和溢出的细节探讨(一)

对于刚学完字符串的同学,可能对字符串在声明时内存为该字符串保留的空间和溢出时到底会发生什么情况不太了解, 我前几天写了几个测试程序,下来就讨论一下这些问题。

我先出几道题如果你想的答案和实际情况不符,你就看看下面的文章,如果都对了,那就请你看看有什么疏漏地方。

问题1:
a)声明
     char string1[5];  和  char string2[6];   
     内存为他俩保留的空间一样吗?
b)声明
     Char  string1[]=”abcd”; 和 char string2[4];   
    内存为他俩保留的空间一样吗?
c)声明
     Char string[5]=”abcd”; 和 char string[5]=”abcde”;     内存为他俩保留的空间一样吗?

 答案:a  char string1[5];  和  char string2[6];  
       内存为他俩保留的空间一样
       据我查看字符串的地址,得知所有字符串(别的类型好像也是)的地址(即String1[0]的地址)都是以偶数开始,也就是说对于一个字符串不管它的大小如何内存为她保留的空间都是偶数。
   比如设string1(string1[0])的地址为#0004,则string1[4]的地址应该为#0008(8-4+1=5),接下来string2的地址应该为#0009由上面知道字符串的得知必须为偶数,所以是string2的地址就跳过#0009,以#000a为地址。这样一来#0009就空了下来。若string1[5];为strng1[6]这空的这一位就刚好放入string1[5]的值。

综上所述,若声明string[N]的N值为奇数,则string[N]  和string[N+1]实际占用的空间是一样的。

由于时间关系我将随后贴出下面的内容。 谢谢!
评论次数(0)  |  浏览次数(849)  |  类型(C) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码