这个问题首先得从堆栈说起,一个程序一般分为三段:代码段,数据段(静态数据),和堆栈段。堆栈段存储程序中的变量、程序传递的参数等(动态分配的变量存储在堆中,静态分配的存储在栈中)。堆栈的增长方式如下:
创新互联公司是一家集网站建设,昌宁企业网站建设,昌宁品牌网站建设,网站定制,昌宁网站建设报价,网络营销,网络优化,昌宁网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
程序在运行的时候会预先分配堆栈空间,所以你的问题中不一定修改了不该修改的地方,有可能那里本来就是空的。
再回到malloc这个函数上来,malloc主要负责分配空间,返回该空间的首地址。那为什么申请空间为0,却可以存储7个字符呢?那是因为C语言的指针中并不检查数组的越界问题,不信的话,你可以这样:char ch[5],然后你去读写ch[6](printf或scanf),这样是不会报错的。但是我们在使用的时候,千万别越界使用,因为这样的程序是非常危险的,试想,如果越界使用的地址正好是一个操作系统的地址,那么你一修改,系统就崩了。同时,C语言的这个机制被黑客广泛地应用与缓冲区溢出攻击,所以你非但不能越界使用指针,还得时刻考虑到指针(数组)是否越界,以加强程序的安全性。
希望对你有所帮助。。。
C语言虽然没有这类的函数,但是您完全可以使用File类文件操作来重新打开一个文件进行写入,该文件被彻底清空了。微软MSDN上有此类例子: FILE * fopen (const char * filename, const char * mode);
Mode:"w "
Create an empty file for writing. If a file with the same name already exists its content is erased.
size_t 类型定义在cstddef头文件中它是一个与机器相关的unsigned类型,其大小足以保证存储内存中对象的大小。size_t是标准C库中定义的,应为unsigned int,在64位系统中为 long unsigned int。
用sizeof(headsize)来代替12是为以后修改程序的方便,以后你只要修改int headsize[]的定义,而不必修改后面的程序,它会自动计算。