首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

在循环内部,使用char数组时的内存有关问题

2012-08-16 
在循环内部,使用char数组时的内存问题首先说,下面代码是在某个循环体内的。然后再说我的问题:只有在第一次

在循环内部,使用char数组时的内存问题


首先说,下面代码是在某个循环体内的。然后再说我的问题:只有在第一次循环可以输出文件名,之后就在二次循环处提示fopen参数错误,查得问题是fn带乱码。因为担心时内存问题,我就把下面 jpegWrite里面的char fn[12]改为static char fn[12]后正常!
我所不解之处是,既然char fn[12]每次都重新赋值了,怎么还会有内存问题(感觉明显时别处运行的代码改变了fn数组的某些内存)?
====================================
下面时部分代码
=====================================
///tm2fn将ctime得到的tm(Sun Jul 8 11:53:19 2012)转换为fn(08115319.jpg),fn即最后姚输出的图片文件名
void tm2fn(char *fn,char *tm)
{
if (tm[8]==' ')
fn[0]='0';
else
fn[0]=tm[8];
fn[1]=tm[9];

fn[2]=tm[11];
fn[3]=tm[12];

fn[4]=tm[14];
fn[5]=tm[15];

fn[6]=tm[17];
fn[7]=tm[18];

fn[8]='.';
fn[9]='j';
fn[10]='p';
fn[11]='g';
return;
}

static void jpegWrite(unsigned char* img)
{

/*
....省略一些代码.....
*/

//初始化filename:fn
char fn[12]={'0','0','0','0','0','0','0','0','0','0','0','0'};
time_t timep;
time(&timep);

char *ptm=ctime(&timep);
///调用上面的函数
tm2fn(fn,ptm);
///第一次循环(次段代码在某个循环体内)正常,第二次带乱码,比如:fn是07080900.jpg(7号八点九分零秒)+尾随一些乱码(正常的话,文件名应该到jpg截止的!)
printf("%s%s\n","The file name is: ",fn);
///因为fn的问题,下面这行在第二次执行时报错,fopen参数错误
FILE *outfile = fopen(fn, "wb" );

/*
.....省略一些代码.......
*/

}
====================
希望我把问题说明白了!求高手指教啊




[解决办法]
我看楼主的文件名:07080900.jpg
是十二个字符
而C的字符串最后应该加一个'\0',占一个字符,就是说楼主的文件名应该最少是13个字符

[解决办法]
为什么给f[12]数组留一个字符串结束符?
[解决办法]
为什么不用:sprintf ?

C/C++ code
    CTime ctime = CTime::GetCurrentTime();        char buffer[20] = {0};     sprintf( buffer , "%02d%02d%02d%02d.jpg" ,ctime.GetDay(),ctime.GetHour(),ctime.GetMinute(), ctime.GetSecond()); 

热点排行