关于数组空间的问题

来源:百度知道 编辑:UC知道 时间:2024/06/25 10:55:55
下面这个程序,是把从0000到9999的数字写进一个文档,但是我明明只用了4个字节的空间,为什么我把字符数组 a的大小改成4就会溢出,但是改成5就不会?极度疑惑~
ps:我调试的时候提示有一个错误指针,但是看了半天也没有问题,郁闷~~

include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int _tmain(int argc, _TCHAR* argv[])
{
char a[5];//为什么改成4就溢出?
int i,j,k=4;//字符最大长度是4
FILE *f=fopen("3.txt","w");
for(i=0;i<10000;i++)
{
itoa(i,a,10);//把i转换成字符以便写入
j=strlen(a);//得到转换后的字符长度(范围是0到4)
while(j!=k && j>0)//如果长度不等于4就先转换低位
{
a[k-1]=a[j-1];
k--;j--;
}
while(k>0 && j!=k)//如果字符长度小于4,高位填零
{
a[k-1]=48;
k--;
}
k=4;
fwrite(a,1,4,f);//写入文本
fwrite("\r\n",1,2,f);//写换行
}
fclose(f);

return 0;
}

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main(int argc, char* argv[])
{
char a[5];//为什么改成4就溢出?
int i,j,k=4;//字符最大长度是4
FILE *f=fopen("3.txt","w");
for(i=0;i<10000;i++)
{
itoa(i,a,10);//把i转换成字符以便写入
j=strlen(a);//得到转换后的字符长度(范围是0到4)
while(j!=k && j>0)//如果长度不等于4就先转换低位
{
a[k-1]=a[j-1];
k--;j--;
}
while(k>0 && j!=k)//如果字符长度小于4,高位填零
{
a[k-1]=48;
k--;
}
k=4;
fwrite(a,1,4,f);//写入文本
fwrite("\r\n",1,2,f);//写换行
}
fclose(f);

return 0;
}
--------------------------
至于为什4会溢出,就要看看字符串数组存数据方式了,最后有个\0要占空间

字符串最后需要一个结束位(\0)