对于刚学完字符串的同学,可能对字符串在声明时内存为该字符串保留的空间和溢出时到底会发生什么情况不太了解, 我前几天写了几个测试程序,下来就讨论一下这些问题。
我先出几道题如果你想的答案和实际情况不符,你就看看下面的文章,如果都对了,那就请你看看有什么疏漏地方。
问题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]实际占用的空间是一样的。
由于时间关系我将随后贴出下面的内容。 谢谢!
- [zhuleilei_2010] 对程序修改如下,编译通过。 DATASG SEGMENT MESS1 10/22 16:59
- [shjnba] call letterc 这个调用子程序 jmp letterc 这个是转到这个标号 是不 08/25 20:12
- [pascale] 晕,中间的注释没加“;” 注释成代码了。太粗心了 01/02 20:44
- [pascale] 谢谢!大家。 12/19 22:32
- [游客] 我是个内心怕困难的人,(我很想改变)就这样这道题成了一个拦路虎,我不敢再看这道题。 ====== 12/18 22:00
- [jcw2008] 祝贺! 12/18 18:35
- [pascale] 5937000/17800的十六为是14d 两个字节可以放下的呀。 12/09 13:21
- [pascale] 我刚debug的一下 并无溢出。我把图片发一下。 12/09 13:09
- [pascale] 好我看看。 12/09 12:56
- [crazyman] 在第一次div word ptr [di+756] 的时候好像就出异常了。博主debug一下把。 12/08 15:45
- [liuyisu2008] 你好 12/04 13:19
- [acool] 没什么。大家在这里本来有应该相互帮助、相互讨论嘛^_^ 一起加油吧~ 11/27 17:29