字符数组做函数参数出错
我写了个函数用于取文件名,参数是字符数组以便返回文件名字,
结果取出的文件名是乱码,请高手帮忙看看有何错误,代码如下:
int getfilename(char filename[])
{
char timenow[32] = {0};
char *filein;
filein = (char*) malloc(32*sizeof(char));
count ++;
getday(timenow);
sprintf(filein, "/mnt/%s%d ",timenow,count);
strcpy(filename,filein);
free(filein);
return 0;
}
[解决办法]
int getfilename(char filename[])
{
filename[0]=0;//有理无理先清0,以免外面传入一个未初始化的数组
char timenow[32] = {0};
char *filein;
filein = (char*) malloc(32*sizeof(char));
count ++;//哪里拱出来的
getday(timenow);
sprintf(filein, "/mnt/%s%d ",timenow,count);//你不觉你的filein可能小了吗
strcpy(filename,filein);
free(filein);
return 0;
}
[解决办法]
单步跟踪一下吧,看看
getday(timenow);
这一步获得的对不对。
[解决办法]
这个,不贴全部代码,不好说。
[解决办法]
int getfilename(char filename[]) //filename并不是数组,它做参数,其实就是一个
{ //指针,也就是相当于char* filename,所以看下面
char timenow[32] = {0};
char *filein;
filein = (char*) malloc(32*sizeof(char));
count ++;
getday(timenow);
sprintf(filein, "/mnt/%s%d ",timenow,count);
strcpy(filename,filein); //在这里,filename跟本没有申请空间,你就把filein拷进来了
free(filein); //所以出错,改为,在前面加上:
return 0; //filename=(char *)malloc(32*sizeof(char));
} //最后再free(filename)
[解决办法]
strcpy函数的原型里面并没有为两个参数开辟空间,
所以必须要自已手动开辟好空间,
再调用这个函数
否则就要占用非法的内存区,
出现内存错误
[解决办法]
strcpy处有错误,filename是传进来的参数,数组大小并不知道,当filein比传入的filename长时,strcpy的时候可能会产生缓冲区溢出。建议使用strncpy。