您好、欢迎来到现金彩票网!
当前位置:21点 > 字符发生器 >

C语言中一个问题我定义了两个长度为20的字符数组结果我在数组的

发布时间:2019-07-04 02:01 来源:未知 编辑:admin

  C语言中一个问题,我定义了两个长度为20的字符数组,结果我在数组的时候都超过了字符的数组的长度了

  C语言中一个问题,我定义了两个长度为20的字符数组,结果我在数组的时候都超过了字符的数组的长度了

  C语言中一个问题,我定义了两个长度为20的字符数组,结果我在数组的时候都超过了字符的数组的长度了,为什么不报错,还能正常运行呢!代码如下,结果如下:main(){charstr1[20],str2[...

  C语言中一个问题,我定义了两个长度为20的字符数组,结果我在数组的时候都超过了字符的数组的长度了,为什么不报错,还能正常运行呢!代码如下,结果如下:

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  C语言是不对数组是否越界进行检查的,这个责任全部推给了编程者,明显的坏处是,一旦造成内存覆盖,发生的问题诡异,且难以捉摸,足以让人抓狂!

  展开全部字符串是动态数组,只要初始化就行了,str1=就能初始化;不需要分配固定内存空间。。。。在其他语言里不仅有动态字符数组,还有动态非字符数组,都不需要限定长度,这些数组是通过结束符来判断长度的,内存是动态的,只需要初始化,初始化其实就是给数组加一个结束符,以便判断长度。。。

  其实就是并不是所有数组都需要加[n]这个长度符号的,这只是最早的C语言不识别动态数组才特意加的(现在的C语言也不支持动态数组,只支持字符数组),动态数组的坏处就是可能占用其他变量内存,但这个在其他语言里编译器替你解决,不需要你操心,c语言不会判定越界。。。追问能详细点吗?谢谢了!既然又结束符可以通过函数判断字符串的长度,为什么还要定义数组的长度呢?那刚开始定义数组长度岂不是多余的了?追答你定一个数组长度主要是防止越界,申请固定长度,比如20,系统会为你分配连续的20个内存单元,这20个就属于该数组专用,坏处是可能占了过多的空间,但不存在越界问题。。。

  如果是动态数组,也许你有连续30个内存单元没人申请,而第31个被申请了,这样如果你数组动态延长到30以上就会出现占用别人的内存的情况,这样别人的变量就被你错误的修改。。。所以C语言的做法就是定长度,但char*不需要定长度,但用也要小心,一般char*会默认最长255bit(delphi短字串就这样),超过255就可能越界。。。。其实内存空间很大的,一般申请100,200不算长,其他软件编译器会替你绕过别人的内存,还是刚才的问题,31-50被占了,51没占,编译器替你跳过去,数组的第31位从内存地址的51开始,但C语言不会。。。

http://magaltouba.com/zifufashengqi/207.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有